Untitled

 avatar
unknown
java
3 years ago
42 kB
3
Indexable


CoinflipManager      

  PlayerConfig pc = PlayerConfig.playerConfigCache.get(p1.getName());
        pc.coinflipswon ++;
        if (pc.coinflipswon == 100) {
            if (!pc.hasAchievement(Achievement.COINFLIP)) {
                pc.addAchievement(Achievement.COINFLIP);
            }
            pc.addAchievement(Achievement.COINFLIP);
        }

Playermine

package de.iraphi.rax.mines;

import com.boydti.fawe.FaweAPI;
import com.boydti.fawe.object.schematic.Schematic;
import com.gmail.filoghost.holographicdisplays.api.HologramsAPI;
import com.gmail.filoghost.holographicdisplays.api.line.TextLine;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import de.iraphi.rax.Main;
import de.iraphi.rax.actionbar.Actionbar;
import de.iraphi.rax.brave.manager.LocationManager;
import de.iraphi.rax.configmanager.ConfigManager;
import de.iraphi.rax.confirmmenu.ConfirmMenu;
import de.iraphi.rax.crate.CrateManager;
import de.iraphi.rax.fakemobs.util.FakeMob;
import de.iraphi.rax.itembuilder.ItemBuilder;
import de.iraphi.rax.itemcreator.ItemCreator;
import de.iraphi.rax.locationutil.LocationUtil;
import de.iraphi.rax.menubuilder.inventory.InventoryMenuBuilder;
import de.iraphi.rax.menubuilder.inventory.ItemListener;
import de.iraphi.rax.playerconfig.PlayerConfig;
import de.iraphi.rax.settings.S;
import de.iraphi.rax.shop.Shop;
import de.iraphi.rax.timeutil.TimeUtil;
import org.bukkit.*;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;

import java.io.File;
import java.io.IOException;
import java.util.*;

public class PlayerMine extends Mine {

    public static final int ISLAND_SIZE = 250;
    public static final int ISLAND_HEIGHT = 150;

    public static World world = Bukkit.getWorld("PlayerMines");
    public static File playerMineFolder = new File("plugins/" + Main.getInstance().getDescription().getName() + "/mines/playermines/");
    public static File schematicFile;
    public static Schematic schematic;

    static {
        try {
            schematicFile = new File("plugins/" + Main.getInstance().getDescription().getName() + "/mines/schematics/default-private-mine.schematic");
            schematic = FaweAPI.load(schematicFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static ConfigManager config = new ConfigManager("mines/pmset");

    private int initialOffsetX = 0;
    private int initialOffsetY = 0;

    private final boolean pasted;

    private FakeMob villager;

    private int minX;
    private int minY;
    private int maxX;
    private int maxY;
    private final List<ItemStack> drops;
    private UUID owner;
    private Location warpSign;

    private List<String> mineSettings;
    private List<String> mineUpgrades;
    private List<String> trusted;
    private final Inventory mineLager;

    private final ConfigManager mineCfg;

    public PlayerMine(UUID uid) {
        super(Bukkit.getOfflinePlayer(uid).getName(), LocationManager.getSpawn());
        this.mineLager = Bukkit.createInventory(null, 9 * 4, S.invPrefix + "Mine Lager");
        this.mineCfg = new ConfigManager(uid.toString(), "/mines/playermines/");
        this.minX = 0;
        this.minY = 0;
        this.maxX = 0;
        this.maxY = 0;
        this.mineUpgrades = new ArrayList<>();
        this.trusted = new ArrayList<>();
        this.owner = uid;
        this.pasted = false;
        this.drops = new ArrayList<>();
        this.mineSettings = new ArrayList<>();
    }

    public int getInitialOffsetX() {
        return initialOffsetX;
    }

    public int getInitialOffsetY() {
        return initialOffsetY;
    }

    public int getMinX() {
        return minX;
    }

    public int getMinY() {
        return minY;
    }

    public int getMaxX() {
        return maxX;
    }

    public int getMaxY() {
        return maxY;
    }

    public boolean isPasted() {
        return pasted;
    }

    public UUID getOwner() {
        return owner;
    }

    public List<String> getMineUpgrades() {
        return mineUpgrades;
    }

    public List<String> getTrusted() {
        return trusted;
    }

    public ConfigManager getMineCfg() {
        return mineCfg;
    }

    private void loadDefaults() {
        if (!config.contains("initialOffsetX")) {
            config.set("initialOffsetX", 0);
        }
        if (!config.contains("initialOffsetY")) {
            config.set("initialOffsetY", 0);
        }
        config.save();
    }

    private void checkAndCreate() {
        schematicFile.getParentFile().mkdirs();
        if (!schematicFile.exists()) System.err.println("No schematic found.");
            /*
            Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(),
                    "mv import " + Settings.worldName + " normal -g " + plugin.getName());
            if (!Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(),
                    "mv modify set generator " + plugin.getName() + " " + Settings.worldName)) {
        Bukkit.getLogger().severe("Multiverse is out of date! - Upgrade to latest version!");
             */
    }

    public static void loadWorld() {

        //Code from https://github.com/tastybento/askyblock/blob/master/src/com/wasteofplastic/askyblock/ASkyBlock.java
        if (world == null) {
            Bukkit.getLogger().info("Creating world...");
            world = WorldCreator.name("PlayerMines").type(WorldType.FLAT).environment(World.Environment.NORMAL).generator(new ChunkGeneratorWorld()).createWorld();
        }

        Bukkit.getLogger().info("Trying to register generator with Multiverse ");
        try {
            Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv import " + "PlayerMines" + " normal -g " + Main.getInstance().getName());
            if (!Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "mv modify set generator " + Main.getInstance().getName() + " " + "PlayerMines")) {
                Bukkit.getLogger().severe("Multiverse is out of date! - Upgrade to latest version!");
            }
        } catch (Exception e) {
            Bukkit.getLogger().severe("Not successfull! Disabling " + Main.getInstance().getName() + "!");
            Bukkit.getServer().getPluginManager().disablePlugin(Main.getInstance());
        }

    }

    public void pasteSchematic(Player player) {
        checkAndCreate();


        this.loadDefaults();

        int initialOffsetXConfig = config.getInt("initialOffsetX");
        int initialOffsetYConfig = config.getInt("initialOffsetY");

        if (initialOffsetXConfig > initialOffsetYConfig) {
            this.initialOffsetY = initialOffsetYConfig + 1;
            config.set("initialOffsetY", this.initialOffsetY);
        } else {
            this.initialOffsetX = initialOffsetXConfig + 1;
            config.set("initialOffsetX", this.initialOffsetX);
        }

        config.save();

        this.minX = ISLAND_SIZE * initialOffsetX;
        this.minY = ISLAND_SIZE * initialOffsetY;
        this.maxX = this.minX + ISLAND_SIZE;
        this.maxY = this.minY + ISLAND_SIZE;

        this.spawnLocation = new Location(world, minX+(int)(ISLAND_SIZE/2)+.5, ISLAND_HEIGHT, minY+(int)(ISLAND_SIZE/2)+.5);

        this.minLocation = spawnLocation.clone().add(30, -32, 20);
        this.maxLocation = spawnLocation.clone().add(-16, -1, 66);

        saveToFile();

        new BukkitRunnable() {
            @Override
            public void run() {
                schematic.paste(new BukkitWorld(world), new Vector(minX + (ISLAND_SIZE / 2), ISLAND_HEIGHT, minY + (ISLAND_SIZE / 2)));
                reset();
                new BukkitRunnable() {
                    @Override
                    public void run() {
                        updateHologram();
                        player.teleport(spawnLocation);
                        respawnVillager();
                        Main.getPlayerMineManager().playerMines.put(PlayerMine.this.owner, PlayerMine.this);
                    }
                }.runTaskLater(Main.getInstance(), 20);
            }
        }.runTaskLaterAsynchronously(Main.getInstance(), 1);

    }

    public List<String> getMineSettings() {
        return mineSettings;
    }

    public Player getPlayer() {
        return Bukkit.getPlayer(this.owner);
    }

    /*
                Vector position = new Vector(this.minX, 30, this.minY); // The paste position
                BukkitWorld worldEditWorld = new BukkitWorld(world);
                EditSession editSession = WorldEdit.getInstance().getEditSessionFactory().getEditSession(worldEditWorld, -1);
                SchematicFormat.getFormat(schematicFile).load(schematicFile).paste(editSession, position, false, false);
                editSession.flushQueue();
         */


    public Long nextChange = 0L;

    public Inventory getMineLager() {
        return mineLager;
    }

    public void openMineGui(Player player) {
        InventoryMenuBuilder invb = new InventoryMenuBuilder(9 * 5, S.getPrefixAlt("§a", "Mines") + "Private Mine");
        for (int i = 0; i < 9 * 5; i++) {
            invb.withItem(i, Shop.FILLER, InventoryMenuBuilder.ALL_CLICK_TYPES);
        }
        invb.withItem(11, new ItemCreator().material(Material.CHEST).displayName("§6Mine-Lager §cBald verfügbar").lore(S.mc + "Gefundene Crates werden hier gelagert.", "", "§eLinksklick §8- §7Mine-Lager öffnen").build());
        invb.withItem(12, new ItemCreator().material(Material.BEACON).displayName("§bKristall-Lager §cBald verfügbar").lore(S.mc + "Gefundene Kristall-Items werden hier gelagert.", "", "§eLinksklick §8- §7Kristall-Lager öffnen").build());
        int[] slots = new int[]{14, 15, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33};
        int i = 0;
        PlayerConfig pc = PlayerConfig.playerConfigCache.get(player.getName());
        for (Mine mine : Main.getMineManager().getMines()) {
            ItemBuilder ib = new ItemBuilder(CrateManager.fromName("minereward" + PlayerConfig.getCrateTierStatic(mine.getMinLevel())).getCrateItem(null))
                    .name(S.mc + "Mine-Level§8: §6§l" + mine.getName())
                    .clearLore()
                    .lore("")
                    .lore(" §8» " + S.mc + "Status§8: " + (pc.getMineLevel() >= mine.getMinLevel() ? "§aFreigeschalten" : "§cNicht freigeschalten"))
                    .lore("")
                    .lore(S.mc + "Verfügbare Blöcke:");
            List<MineBlock> listed = new ArrayList<>();
            for (MineBlock mb : mine.getBlocks()) {
                if (!listed.contains(mb)) {
                    listed.add(mb);
                    ib.lore(" §8- §6" + ChatColor.stripColor(mb.getName()));
                }
            }
            ib.lore("");
            ib.lore("§eLinksklick §8- §7Block-Pattern ändern");
            if (pc.getMineLevel() >= mine.getMinLevel()) {
                invb.withItem(slots[i], ib.build(), new ItemListener() {
                    @Override
                    public void onInteract(Player player, ClickType action, ItemStack item) {
                        if (nextChange > System.currentTimeMillis()) {
                            player.sendMessage(S.getPrefix("§a", "Mines") + "Bitte warte noch " + TimeUtil.convertedBanDate(nextChange));
                            return;
                        }
                        ConfirmMenu.openBestätigung(player, p -> {
                            nextChange = System.currentTimeMillis() + (1000 * 60 * 2);
                            blocks = mine.getBlocks();
                            saveToFile();
                            reset();
                        }, "Block-Pattern ändern?", new ItemBuilder(item).name("§ePattern ändern?").build());
                    }
                }, InventoryMenuBuilder.ALL_CLICK_TYPES);
            } else {
                invb.withItem(slots[i], ib.build(), new ItemListener() {
                    @Override
                    public void onInteract(Player player, ClickType action, ItemStack item) {
                        player.sendMessage(S.getPrefix("§a", "Mines") + "Du hast dieses Block-Pattern noch nicht freigeschalten.");
                    }
                }, InventoryMenuBuilder.ALL_CLICK_TYPES);
            }
            i++;
        }
        invb.show(player);
    }

    public void openMineGuiSettings(Player player) {
        InventoryMenuBuilder invb = new InventoryMenuBuilder(9 * 3, S.getPrefixAlt("§a", "Mines") + "Private Mine");
        for (int i = 0; i < 9 * 3; i++) {
            invb.withItem(i, Shop.FILLER, InventoryMenuBuilder.ALL_CLICK_TYPES);
        }

        invb.withItem(10, new ItemCreator().material(Material.DIAMOND_PICKAXE).displayName("§eBlöcke zerstören").lore(S.mc + "Blöcke können zerstört werden.", "", " §8» " + S.mc + "Status§8: " + (this.mineSettings.contains("destroyblocks") ? "§cVerboten" : "§aErlaubt"), "", "§eLinksklick §8- §7Einstellung ändern").build(), new ItemListener() {
            @Override
            public void onInteract(Player player, ClickType action, ItemStack item) {
                if (mineSettings.contains("destroyblocks")) {
                    mineSettings.remove("destroyblocks");
                } else {
                    mineSettings.add("destroyblocks");
                }
                invb.withItem(10, new ItemCreator().material(Material.DIAMOND_PICKAXE).displayName("§eBlöcke zerstören").lore(S.mc + "Blöcke können zerstört werden.", "", " §8» " + S.mc + "Status§8: " + (mineSettings.contains("destroyblocks") ? "§cVerboten" : "§aErlaubt"), "", "§eLinksklick §8- §7Einstellung ändern").build());
                invb.refreshContent();
            }
        }, InventoryMenuBuilder.ALL_CLICK_TYPES);

        invb.withItem(11, new ItemCreator().material(Material.BEDROCK).displayName("§aBlöcke platzieren").lore(S.mc + "Blöcke können platziert werden.", "", " §8» " + S.mc + "Status§8: " + (this.mineSettings.contains("placeblocks") ? "§cVerboten" : "§aErlaubt"), "", "§eLinksklick §8- §7Einstellung ändern").build(), new ItemListener() {
            @Override
            public void onInteract(Player player, ClickType action, ItemStack item) {
                if (mineSettings.contains("placeblocks")) {
                    mineSettings.remove("placeblocks");
                } else {
                    mineSettings.add("placeblocks");
                }
                invb.withItem(11, new ItemCreator().material(Material.BEDROCK).displayName("§aBlöcke platzieren").lore(S.mc + "Blöcke können platziert werden.", "", " §8» " + S.mc + "Status§8: " + (mineSettings.contains("placeblocks") ? "§cVerboten" : "§aErlaubt"), "", "§eLinksklick §8- §7Einstellung ändern").build());
                invb.refreshContent();
            }
        }, InventoryMenuBuilder.ALL_CLICK_TYPES);

        invb.withItem(12, new ItemCreator().material(Material.ENDER_PEARL).displayName("§5Besucher").lore(S.mc + "Spieler können deine Insel besuchen.", "", " §8» " + S.mc + "Status§8: " + (this.mineSettings.contains("visit") ? "§cVerboten" : "§aErlaubt"), "", "§eLinksklick §8- §7Einstellung ändern").build(), new ItemListener() {
            @Override
            public void onInteract(Player player, ClickType action, ItemStack item) {
                if (mineSettings.contains("visit")) {
                    mineSettings.remove("visit");
                } else {
                    mineSettings.add("visit");
                }
                invb.withItem(12, new ItemCreator().material(Material.ENDER_PEARL).displayName("§5Besucher").lore(S.mc + "Spieler können deine Insel besuchen.", "", " §8» " + S.mc + "Status§8: " + (mineSettings.contains("visit") ? "§cVerboten" : "§aErlaubt"), "", "§eLinksklick §8- §7Einstellung ändern").build());
                invb.refreshContent();
            }
        }, InventoryMenuBuilder.ALL_CLICK_TYPES);


        invb.withItem(13, new ItemCreator().material(Material.WATCH).displayName("§4Automatische Mine-Resets").lore(S.mc + "Die Mine wird automatisch zurückgesetzt.", "", " §8» " + S.mc + "Status§8: " + (this.mineSettings.contains("reset") ? "§cDeaktiviert" : "§aAktiviert"), "", "§eLinksklick §8- §7Einstellung ändern").build(), new ItemListener() {
            @Override
            public void onInteract(Player player, ClickType action, ItemStack item) {
                if (mineSettings.contains("reset")) {
                    mineSettings.remove("reset");
                } else {
                    mineSettings.add("reset");
                }
                invb.withItem(13, new ItemCreator().material(Material.WATCH).displayName("§4Automatische Mine-Resets").lore(S.mc + "Die Mine wird automatisch zurückgesetzt.", "", " §8» " + S.mc + "Status§8: " + (mineSettings.contains("reset") ? "§cDeaktiviert" : "§aAktiviert"), "", "§eLinksklick §8- §7Einstellung ändern").build());
                invb.refreshContent();
            }
        }, InventoryMenuBuilder.ALL_CLICK_TYPES);

        invb.show(player);
    }

    @Override
    public void updateHologram() {

        if (time <= 0) {
            time = 60 * 3;
            reset();
        } else if (!this.mineSettings.contains("reset")) time--;

        if (hologram == null) {
            hologram = HologramsAPI.createHologram(Main.getInstance(), this.spawnLocation.clone().add(0, 4, 2));
            hologram.appendItemLine(new ItemBuilder(Material.SKULL_ITEM).setSkullOwner(Bukkit.getOfflinePlayer(owner).getName()).build());
            hologram.appendTextLine("");
            hologram.appendTextLine(S.mc + "§6§l" + getName() + "'s Private Mine");
            hologram.appendTextLine("");
            hologram.appendTextLine(S.mc + "Zeit bis zum Reset§8: §a" + TimeUtil.convertedBanDate(System.currentTimeMillis() + time * 1000L));
            hologram.appendTextLine(S.mc + "Freigeschaltet ab§8: §cLevel " + minLevel);
            hologram.appendTextLine("");
            hologram.appendTextLine("§a/mine upgrade §e- §6Upgrades");
            hologram.appendTextLine("§a/mine tp §e- §6Teleport");
            hologram.appendTextLine("§a/mine trust §e- §6Berechtigungen");
            hologram.appendTextLine("§a/mine settings §e- §6Einstellungen");
            hologram.appendTextLine("");
            world.getPlayers().forEach(player -> {
                Actionbar.sendActionBar(player, "§fMine-Level§8: §e" + PlayerConfig.getPlayerData(player.getName()).getMineLevel() + " §8(§C§L");
            });
        }

        ((TextLine) hologram.getLine(4)).setText(S.mc + "Zeit bis zum Reset§8: §a" + TimeUtil.convertedBanDate(System.currentTimeMillis() + time * 1000L));

    }

    public static void openMenu(Player player) {
        InventoryMenuBuilder invb = new InventoryMenuBuilder(9 * 3, S.getPrefixAlt("§a", "Mines") + "Private Mine");
        for (int i = 0; i < 9 * 3; i++) {
            invb.withItem(i, Shop.FILLER);
        }
        invb.withItem(11, new ItemBuilder(Material.ENDER_PEARL).name("§5Private-Mine-Teleport").lore("§7Teleportiere dich zu deiner eigenen Mine").build(), new ItemListener() {
            @Override
            public void onInteract(Player player, ClickType action, ItemStack item) {
                player.performCommand("mine tp");
            }
        }, InventoryMenuBuilder.ALL_CLICK_TYPES);

        invb.withItem(13, new ItemBuilder(Material.CHEST).name("§6Private-Mine-Upgrades").lore("§7Ändere dein Block-Pattern").build(), new ItemListener() {
            @Override
            public void onInteract(Player player, ClickType action, ItemStack item) {
                player.performCommand("mine upgrade");
            }
        }, InventoryMenuBuilder.ALL_CLICK_TYPES);

        invb.withItem(15, new ItemBuilder(Material.PAPER).name("§cPrivate-Mine-Settings").lore("§7Passe deine Mine an").build(), new ItemListener() {
            @Override
            public void onInteract(Player player, ClickType action, ItemStack item) {
                player.performCommand("mine settings");
            }
        }, InventoryMenuBuilder.ALL_CLICK_TYPES);
        invb.show(player);
    }

    public static <T> T mostCommon(List<T> list) {
        Map<T, Integer> map = new HashMap<>();

        for (T t : list) {
            Integer val = map.get(t);
            map.put(t, val == null ? 1 : val + 1);
        }

        Map.Entry<T, Integer> max = null;

        for (Map.Entry<T, Integer> e : map.entrySet()) {
            if (max == null || e.getValue() > max.getValue())
                max = e;
        }

        return max.getKey();
    }

    public FakeMob getVillager() {
        return villager;
    }

    public void saveToFile() {
        this.mineCfg.set("owner", owner.toString());
        this.mineCfg.set("minLevel", this.minLevel);
        this.mineCfg.set("minLocation", LocationUtil.locationToString(minLocation));
        this.mineCfg.set("maxLocation", LocationUtil.locationToString(maxLocation));
        this.mineCfg.set("spawnLocation", LocationUtil.locationToString(spawnLocation));
        List<String> blocks = new ArrayList<>();
        for (MineBlock mineBlock : this.blocks) {
            blocks.add(mineBlock.name());
        }
        this.mineCfg.set("blocks", blocks);
        this.mineCfg.set("initialOffsetX", initialOffsetX);
        this.mineCfg.set("initialOffsetY", initialOffsetY);
        this.mineCfg.set("minX", minX);
        this.mineCfg.set("minY", minY);
        this.mineCfg.set("maxX", maxX);
        this.mineCfg.set("maxY", maxY);
        this.mineCfg.set("mineUpgrades", mineUpgrades);
        this.mineCfg.set("trusted", trusted);
        this.mineCfg.set("settings", this.mineSettings);
        this.mineCfg.set("warpSign", warpSign != null ? LocationUtil.locationToString(warpSign) : null);
        this.mineCfg.set("lager", this.mineLager.getContents());
        this.mineCfg.save();
    }

    public boolean hasWarpSign() {
        return warpSign != null;
    }

    public void setWarpSign(Location warpSign) {
        this.warpSign = warpSign;
    }

    public Location getWarpSign() {
        return warpSign;
    }

    public void loadFromFile() {
        this.owner = UUID.fromString(this.mineCfg.getString("owner"));
        this.minLevel = this.mineCfg.getInt("minLevel");
        this.minLocation = LocationUtil.stringToLocation(this.mineCfg.getString("minLocation"));
        this.maxLocation = LocationUtil.stringToLocation(this.mineCfg.getString("maxLocation"));
        this.spawnLocation = LocationUtil.stringToLocation(this.mineCfg.getString("spawnLocation"));
        if (this.mineCfg.contains("warpSign"))
            this.warpSign = LocationUtil.stringToLocation(this.mineCfg.getString("warpSign"));
        if (this.mineCfg.contains("settings")) {
            this.mineSettings = this.mineCfg.getStringList("settings");
        }
        List<MineBlock> blocks = new ArrayList<>();
        for (String mbs : this.mineCfg.getStringList("blocks")) {
            blocks.add(MineBlock.valueOf(mbs));
        }
        this.blocks = blocks;
        this.initialOffsetX = this.mineCfg.getInt("initialOffsetX");
        this.initialOffsetY = this.mineCfg.getInt("initialOffsetY");
        this.minX = this.mineCfg.getInt("minX");
        this.minY = this.mineCfg.getInt("minY");
        this.maxX = this.mineCfg.getInt("maxX");
        this.maxY = this.mineCfg.getInt("maxY");
        this.mineUpgrades = this.mineCfg.getStringList("mineUpgrades");
        this.trusted = this.mineCfg.getStringList("trusted");
        this.mineLager.setContents(this.mineCfg.contains("lager") ? ((List<ItemStack>) this.mineCfg.get("lager")).toArray(new ItemStack[0]) : new ItemStack[0]);
        respawnVillager();
    }

    public void respawnVillager() {
        if (this.villager == null) {
            this.villager = new FakeMob(new Random().nextInt(), this.spawnLocation.clone().add(-5, 1, 15), EntityType.VILLAGER);
            this.villager.setCustomName("§a§lMiner");
            this.villager.setPlayerLook(true);
        }
    }

}


Minelistener

package de.iraphi.rax.mines;

import com.boydti.fawe.IFawe;
import de.iraphi.rax.achievement.Achievement;
import de.iraphi.rax.actionbar.Actionbar;
import de.iraphi.rax.fakemobs.event.PlayerInteractFakeMobEvent;
import de.iraphi.rax.maths.Maths;
import de.iraphi.rax.playerconfig.PlayerConfig;
import de.iraphi.rax.reward.Reward;
import de.iraphi.rax.settings.S;
import de.iraphi.rax.util.Util;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.entity.FallingBlock;
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.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.util.BlockIterator;
import org.bukkit.util.Vector;

import java.util.HashMap;
import java.util.Random;

public class MineListener implements Listener {

    @EventHandler
    public void on(EntityDamageEvent event) {
        if (event.getEntity() instanceof Player && (
                event.getEntity().getWorld().getName().equalsIgnoreCase("mineEF")
                        || event.getEntity().getWorld().getName().equalsIgnoreCase("PlayerMines"))) {
            event.setCancelled(true);
        }
    }

    @EventHandler
    public void on(SignChangeEvent event) {
        PlayerMine playerMine;
        if ((playerMine = PlayerMineManager.forBlock(event.getBlock())) != null) {
            if (event.getPlayer().getUniqueId().equals(playerMine.getOwner()) && event.getLine(0)
                    .equalsIgnoreCase("[warp]")) {
                if (playerMine.hasWarpSign()) {
                    playerMine.getWarpSign().getBlock().setType(Material.AIR);
                }
                playerMine.setWarpSign(event.getBlock().getLocation());
                event.setLine(0, "§8***");
                event.setLine(1, "§a§lMine-Warp");
                event.setLine(2, "§6" + event.getPlayer().getName());
                event.setLine(3, "§8***");
                event.getPlayer()
                        .sendMessage(S.getPrefix("§a", "Mines") + "Du hast ein Warp-Schild platziert.");
            }
        }
    }

    @EventHandler
    public void on(PlayerBucketEmptyEvent event) {
        if (event.getPlayer().getWorld().getName().equalsIgnoreCase("PlayerMines")
                && !PlayerMineManager.canBuild(event.getPlayer(), event.getBlockClicked())) {
            event.setCancelled(true);
        }
    }

    @EventHandler
    public void on(BlockPlaceEvent event) {
        if (event.getPlayer().getWorld().getName().equalsIgnoreCase("PlayerMines")) {
            if (!PlayerMineManager.canBuild(event.getPlayer(), event.getBlock()) || MineManager.isInMine(
                    event.getBlock(), false)) {
                event.setCancelled(true);
                return;
            }
            PlayerMine playerMine = PlayerMineManager.forBlock(event.getBlock());
            if (playerMine != null) {
                if (playerMine.getMineSettings().contains("placeblocks")) {
                    event.setCancelled(true);
                }
            }
        }
    }

    @EventHandler
    public void on(PlayerInteractEvent event) {
        if (!event.getAction().equals(Action.RIGHT_CLICK_AIR) && !event.getAction()
                .equals(Action.LEFT_CLICK_AIR) && event.getPlayer().getWorld().getName()
                .equalsIgnoreCase("PlayerMines") && !PlayerMineManager.canBuild(event.getPlayer(),
                event.getClickedBlock())) {
            event.setCancelled(true);
        }
    }

    @EventHandler
    public void on(BlockBreakEvent event) {
        if (event.getPlayer().getWorld().getName().equalsIgnoreCase("PlayerMines")
                && !PlayerMineManager.canBuild(event.getPlayer(), event.getBlock())) {
            event.setCancelled(true);
            return;
        }

        if (onBlockBreakEvent(event)) {
            for (MineEnchant me : MineEnchant.MINE_ENCHANTS) {
                if (me.hasEnchantment(event.getPlayer().getItemInHand())) {
                    if (me.getListener() != null) {
                        me.getListener().onBlockBreak(event.getBlock(), event.getPlayer(),
                                me.getEnchantmentLevelFromPickaxe(event.getPlayer().getItemInHand()));
                    }
                }
            }
        } else {
            if (event.getPlayer().getWorld().getName().equalsIgnoreCase("PlayerMines")) {
                PlayerMine playerMine = PlayerMineManager.forBlock(event.getBlock());
                if (playerMine != null) {
                    if (playerMine.hasWarpSign() && playerMine.getWarpSign().getBlock()
                            .equals(event.getBlock())) {
                        if (playerMine.getOwner().equals(event.getPlayer().getUniqueId())) {
                            playerMine.setWarpSign(null);
                            event.getPlayer()
                                    .sendMessage(S.getPrefix("§a", "Mines") + "Du hast das Warp-Schild entfernt.");
                            return;
                        } else {
                            event.setCancelled(true);
                        }
                    }
                    if (playerMine.getMineSettings().contains("destroyblocks")) {
                        event.setCancelled(true);
                    }
                }
            }
        }
    }

    public static boolean onBlockBreakEvent(BlockBreakEvent event) {
        if (MineManager.isInMine(event.getBlock(), false)) {
            event.setCancelled(true);
            event.setExpToDrop(0);
            event.getBlock().getDrops().clear();

            Player player = event.getPlayer();
            Block block = event.getBlock();
            PlayerConfig pc = PlayerConfig.playerConfigCache.get(player.getName());
            Mine mine = MineManager.forBlock(block, false);
            MineBlock blockType = MineBlock.forMaterial(block.getType());

            if (pc.getMineLevel() < mine.getMinLevel()) {
                event.getPlayer().sendMessage(
                        S.getPrefix("§a", "Mines") + "Du benötigst mindestens Level " + S.sc
                                + mine.getMinLevel() + S.mc + ", um hier abbauen zu können.");
                return false;
            }


/*

                if(Util.hitChance(MineManager.getLevel(event.getPlayer().getUniqueId()) / (double) MineManager.config.getOrDefault("crateChance", 15.0))) {
                    MineReward reward = MineReward.getRandomReward();
                    if(reward.broadcast) {
                        Bukkit.broadcastMessage(S.pr+S.sc+event.getPlayer().getName()+S.mc+" hat "+S.sc+"§l"+reward.name+S.mc+" als §7Mine§8-§7Reward"+S.mc+" erhalten.");
                    }
                    Util.giveItem(event.getPlayer(), reward.item);
                    event.getPlayer().sendMessage(S.pr+"Du hast "+S.sc+reward.name+S.mc+" erhalten.");
                    if (!pc.contains("mine2.belohnungen")) pc.set("mine2.belohnungen", 0L);
                    pc.set("mine2.belohnungen",pc.getLong("mine2.belohnungen")+1);
                }
            }

 */

            if (blockType != null) {
                if (pc.getMineLevel() < blockType.getMinLevel()) {
                    event.getPlayer().sendMessage(
                            S.getPrefix("§a", "Mines") + "Du benötigst mindestens Level " + S.sc
                                    + blockType.getMinLevel() + S.mc + ", um diesen Block abbauen zu können.");
                    return false;
                }

                if (blockType == MineBlock.LUCKY_BLOCK) {
                    block.getWorld()
                            .playEffect(block.getLocation().clone().add(0.5, 0.5, 0.5), Effect.STEP_SOUND,
                                    block.getTypeId(), block.getData());
                    block.setType(Material.AIR);
                    mine.minedBlocks++;
                    Reward.rewardPlayer(S.getPrefix("§a", "Mines"), player, Reward.getRandomReward());
                    pc.setMineRewardsTotal(pc.getMineRewardsTotal() + 1);
                    if (pc.getMineRewardsTotal() == 500) {
                        if (!pc.hasAchievement(Achievement.CRATES1)) {
                            pc.addAchievement(Achievement.CRATES1);
                        }
                    } else if (pc.getMineRewardsTotal() == 2000) {
                        if (pc.hasAchievement(Achievement.CRATES2)) {
                            pc.addAchievement(Achievement.CRATES2);
                        }
                    }
                    return true;
                }

                if (pc.getMinedBlocks(blockType) >= pc.getInventorySize()) {
                    if (MineEnchant.MINE_ENCHANTS.get(0).hasEnchantment(player.getItemInHand())) {
                        if (pc.getMinedBlocks(MineBlock.forMaterial(block.getType()))
                                >= pc.getInventorySize() - 1) {
                            MineManager.sellAll(player);
                            player.playSound(player.getLocation(), Sound.HORSE_ARMOR, 1, 1);
                        }
                    } else {
                        Actionbar.sendActionBar(event.getPlayer(),
                                "§4§lEiner oder mehrere deiner Mine-Inventar Slots sind voll.");
                    }
                } else {
                    int i = 1;
                    if (MineEnchant.FORTUNE.hasEnchantment(player.getItemInHand())) {
                        i = MineEnchant.FORTUNE.getEnchantmentLevelFromPickaxe(player.getItemInHand());
                    }
                    for (int i1 = 0; i1 < i; i1++) {
                        pc.addMineBlocks(blockType);
                    }
                }
                if (Maths.randomDouble(0, 100) < (1.25 + (pc.getMineLevel() / 100)
                        + pc.getPrestigeLevel() * 0.25)) {
                    if (new Random().nextInt(100) < 25) {
                        Reward.rewardPlayer(S.getPrefix("§a", "Mines"), player, Reward.getRandomReward());
                        pc.setMineRewardsTotal(pc.getMineRewardsTotal() + 1);
                        if (pc.getMineRewardsTotal() == 500) {
                            if (!pc.hasAchievement(Achievement.CRATES1)){
                                pc.addAchievement(Achievement.CRATES1);
                            }
                        } else if (pc.getMineRewardsTotal() == 2000) {
                            if (!pc.hasAchievement(Achievement.CRATES2)) {
                                pc.addAchievement(Achievement.CRATES2);
                            }
                        }
                    }
                }
                if (pc.getMineBlocksTotal() >= 100000) {
                    if (!pc.hasAchievement(Achievement.MINER1)) {
                        pc.addAchievement(Achievement.MINER1);
                    }
                } else if (pc.getMineBlocksTotal() >= 250000) {
                    if (!pc.hasAchievement(Achievement.MINER2)){
                        pc.addAchievement(Achievement.MINER2);
                    }
                }
                boolean x = true;
                for (MineBlock mineBlock : MineBlock.getOres()) {
                    if (!x) {
                        continue;
                    }
                    x = pc.getMinedBlocksTotal(mineBlock) == 10000;
                }
                if (x) {
                    if (!pc.hasAchievement(Achievement.ERZE)) {
                        pc.addAchievement(Achievement.ERZE);
                    }
                }
                block.getWorld()
                        .playEffect(block.getLocation().clone().add(0.5, 0.5, 0.5), Effect.STEP_SOUND,
                                block.getTypeId(), block.getData());
                block.setType(Material.AIR);
                mine.minedBlocks++;

            }
            if (pc.getMinePoints() >= MineManager.calculateMinePoints(pc.getMineLevel() + 1)) {
                if (pc.isAutoLevelUp()) {
                    MineManager.tryLevelUp(player);
                }
            }
            return true;
        }
        return false;
    }

    HashMap<String, Long> d = new HashMap<>();

    @EventHandler
    public void on(PlayerInteractFakeMobEvent event) {
        if (event.getMob().getCustomName().equalsIgnoreCase("§a§lMiner")) {
            PlayerMine.openMenu(event.getPlayer());
            event.setCancelled(true);
        }
    }

    @EventHandler(priority = EventPriority.HIGHEST)
    public void on(EntityChangeBlockEvent event) {
        if (event.getEntity() instanceof FallingBlock) {
            Block blockWhereFallingLands = event.getBlock();
            event.getEntity().remove();
            event.setCancelled(true);
            event.getBlock().setType(Material.AIR);
            for (Block block : Util.generateSphere(blockWhereFallingLands.getLocation(), 2, false)) {
                if (MineManager.forBlock(block, false) != null && block.getType() != Material.AIR) {
                    block.setType(Material.ENDER_STONE);
                }
            }
        }
    }

    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        if (MineEnchant.MINE_ENCHANTS.get(2).hasEnchantment(event.getPlayer().getItemInHand())) {
            if (event.getAction() != Action.RIGHT_CLICK_AIR
                    && event.getAction() != Action.RIGHT_CLICK_BLOCK) {
                return;
            }
            if (!d.containsKey(event.getPlayer().getName())) {
                d.put(event.getPlayer().getName(), System.currentTimeMillis());
            }
            if (d.get(event.getPlayer().getName()) > System.currentTimeMillis()) {
                return;
            }

            d.put(event.getPlayer().getName(), System.currentTimeMillis() + 500);

            BlockIterator iter = new BlockIterator(event.getPlayer(), MineEnchant.MINE_ENCHANTS.get(2)
                    .getEnchantmentLevelFromPickaxe(event.getPlayer().getItemInHand()) == 1 ? 10 : 15);
            Block currentTargetBlock = iter.next();
            while (iter.hasNext()) {
                currentTargetBlock = iter.next();
                if (onBlockBreakEvent(new BlockBreakEvent(currentTargetBlock, event.getPlayer()))) {
                    World world = currentTargetBlock.getWorld();
                    double radius = 1.5;
                    double X = currentTargetBlock.getX();
                    double Y = currentTargetBlock.getY();
                    double Z = currentTargetBlock.getZ();
                    double minX = X - radius;
                    double maxX = X + radius + 1.0D;
                    double minY = Y - radius;
                    double maxY = Y + radius + 1.0D;
                    double minZ = Z - radius;
                    double maxZ = Z + radius + 1.0D;
                    double x = minX;
                    while (x < maxX) {
                        double y = minY;
                        while (y < maxY) {
                            double z = minZ;
                            while (z < maxZ) {
                                double distance = ((X - x) * (X - x) + ((Z - z) * (Z - z)) + ((Y - y) * (Y - y)));
                                if (distance < radius * radius) {
                                    Location location = new Location(currentTargetBlock.getWorld(), x, y, z);
                                    Block block1 = location.getBlock();
                                    MineListener.onBlockBreakEvent(new BlockBreakEvent(block1, event.getPlayer()));
                                }
                                z++;
                            }
                            y++;
                        }
                        x++;
                    }
                }
            }
            drawLine(currentTargetBlock.getLocation().clone().add(0.5, 0, 0.5),
                    event.getPlayer().getLocation().clone().getBlock().getLocation().add(0.5, 1.5, 0.5),
                    Effect.COLOURED_DUST);
            drawLine(currentTargetBlock.getLocation().clone().add(0.5, 0, 0.5),
                    event.getPlayer().getLocation().clone().getBlock().getLocation().add(0.5, 1.5, 0.5),
                    Effect.LAVADRIP);
        }
    }

    public final Block getTargetBlock(Player player, int range) {
        BlockIterator iter = new BlockIterator(player, range);
        Block lastBlock = iter.next();
        while (iter.hasNext()) {
            lastBlock = iter.next();
            continue;
        }
        return lastBlock;
    }


    public static void drawLine(Location targetLoc, Location startLoc, Effect effect) {
        Location origin = startLoc.clone();
        Vector target = targetLoc.clone().toVector();// location where it ends (for the direction only)
        origin.setDirection(
                target.subtract(origin.toVector()));  // setting direction bc of above information
        Vector increase = origin.getDirection(); // getting what to increase by
        for (int counter = 0; counter < 10; counter++) { // 5 == blocks to travel
            Location loc = origin.add(increase); // add the increase
            loc.getWorld().playEffect(loc, effect, 2); // spawn the particle
        }
    }

}

jackpotManager
                            pc.jackpotsWon++;
                            //JACKPOT ACHIEVEMENT
                            if (pc.jackpotsWon == 5) {
                                if (!pc.hasAchievement(Achievement.JACKPOT)) {
                                    pc.addAchievement(Achievement.JACKPOT);
                                }
                            }
                            //JACKPOT ACHIEVEMENT

Editor is loading...