Untitled
unknown
java
3 years ago
42 kB
7
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...