diff --git a/pom.xml b/pom.xml
index 7a3a1b6..bded03c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,9 +63,19 @@
sonatype
https://oss.sonatype.org/content/groups/public/
+
+ jitpack.io
+ https://jitpack.io
+
+
+ com.github.MilkBowl
+ VaultAPI
+ 1.7
+ provided
+
com.arangodb
arangodb-java-driver
diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java b/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java
index f5f67cd..60d140e 100644
--- a/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java
+++ b/src/main/java/xyz/mineconomia/mineconomiacore/MineconomiaCore.java
@@ -1,7 +1,6 @@
package xyz.mineconomia.mineconomiacore;
import org.bukkit.Bukkit;
-import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import xyz.mineconomia.mineconomiacore.CustomItems.ItemManager;
@@ -10,9 +9,9 @@ import xyz.mineconomia.mineconomiacore.commands.funHarvestBall;
import xyz.mineconomia.mineconomiacore.commands.mcore;
import xyz.mineconomia.mineconomiacore.commands.tpw;
import xyz.mineconomia.mineconomiacore.events.playerAccount;
+import xyz.mineconomia.mineconomiacore.events.specialEvents;
import xyz.mineconomia.mineconomiacore.handlers.FHBHandler;
-import javax.security.auth.login.Configuration;
import java.util.Objects;
import java.util.logging.Logger;
@@ -41,6 +40,7 @@ public final class MineconomiaCore extends JavaPlugin {
PluginManager pm = getServer().getPluginManager();
pm.registerEvents(new FHBHandler(), this);
pm.registerEvents(new playerAccount(), this);
+ pm.registerEvents(new specialEvents(), this);
//BookCommand
Objects.requireNonNull(getCommand("pomoc")).setExecutor(new BookCommand());
diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/PDC.java b/src/main/java/xyz/mineconomia/mineconomiacore/PDC.java
new file mode 100644
index 0000000..4fe0af9
--- /dev/null
+++ b/src/main/java/xyz/mineconomia/mineconomiacore/PDC.java
@@ -0,0 +1,44 @@
+package xyz.mineconomia.mineconomiacore;
+
+import org.bukkit.NamespacedKey;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.persistence.PersistentDataContainer;
+import org.bukkit.persistence.PersistentDataType;
+
+public class PDC {
+
+
+
+ public static void WritePlayerPDC(Player player, String key, PersistentDataType type, Object value){
+ NamespacedKey nKey = new NamespacedKey(MineconomiaCore.getPlugin(MineconomiaCore.class), key);
+ PersistentDataContainer pdc = player.getPersistentDataContainer();
+ pdc.set(nKey, type, value);
+
+ }
+ public static Object GetPlayerPDC(Player player, String key, PersistentDataType type){
+ NamespacedKey nKey = new NamespacedKey(MineconomiaCore.getPlugin(MineconomiaCore.class), key);
+ PersistentDataContainer pdc = player.getPersistentDataContainer();
+ return pdc.get(nKey, type);
+ }
+ public static void DeletePlayerPDC(Player player, String key){
+ NamespacedKey nKey = new NamespacedKey(MineconomiaCore.getPlugin(MineconomiaCore.class), key);
+ PersistentDataContainer pdc = player.getPersistentDataContainer();
+ pdc.remove(nKey);
+
+ }
+ public static ItemMeta WriteItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type, Object value){
+ NamespacedKey nKey = new NamespacedKey(MineconomiaCore.getPlugin(MineconomiaCore.class), key);
+ PersistentDataContainer pdc = itemMeta.getPersistentDataContainer();
+ pdc.set(nKey, type, value);
+ return itemMeta;
+
+ }
+ public static Object GetItemMetaPDC(ItemMeta itemMeta, String key, PersistentDataType type){
+ NamespacedKey nKey = new NamespacedKey(MineconomiaCore.getPlugin(MineconomiaCore.class), key);
+ PersistentDataContainer pdc = itemMeta.getPersistentDataContainer();
+ return pdc.get(nKey, type);
+ }
+
+
+}
diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/commands/BookCommand.java b/src/main/java/xyz/mineconomia/mineconomiacore/commands/BookCommand.java
index e9b7d6f..f1ddce3 100644
--- a/src/main/java/xyz/mineconomia/mineconomiacore/commands/BookCommand.java
+++ b/src/main/java/xyz/mineconomia/mineconomiacore/commands/BookCommand.java
@@ -1,14 +1,12 @@
package xyz.mineconomia.mineconomiacore.commands;
-import net.md_5.bungee.api.chat.*;
+import net.md_5.bungee.api.chat.TextComponent;
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 org.bukkit.inventory.meta.BookMeta;
import xyz.upperlevel.spigot.book.BookUtil;
public class BookCommand implements CommandExecutor {
diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java b/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java
index 1abd3ea..0867911 100644
--- a/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java
+++ b/src/main/java/xyz/mineconomia/mineconomiacore/commands/mcore.java
@@ -2,11 +2,39 @@ package xyz.mineconomia.mineconomiacore.commands;
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.PlayerInventory;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.NotNull;
+import xyz.mineconomia.mineconomiacore.PDC;
+
+import java.io.IOException;
+import java.util.Objects;
+
+import static xyz.mineconomia.mineconomiacore.config.config;
public class mcore implements CommandExecutor {
@Override
- public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, String[] strings) {
+ public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, String[] args) {
+
+ if (Objects.equals(args[0], "setSpecial")){
+ Player player = (Player) commandSender;
+ PlayerInventory inventory= player.getInventory();
+ ItemStack item = inventory.getItemInMainHand();
+ ItemMeta meta = item.getItemMeta();
+ assert meta != null;
+ PDC.WriteItemMetaPDC(meta, "special", PersistentDataType.BOOLEAN,true);
+ item.setItemMeta(meta);
+ config.set("special.item", item);
+ try {
+ config.save("config.yml");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return true;
+ }
return false;
}
}
diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/commands/tpw.java b/src/main/java/xyz/mineconomia/mineconomiacore/commands/tpw.java
index e34fe37..f2c5248 100644
--- a/src/main/java/xyz/mineconomia/mineconomiacore/commands/tpw.java
+++ b/src/main/java/xyz/mineconomia/mineconomiacore/commands/tpw.java
@@ -9,8 +9,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
-import java.lang.reflect.Array;
-
public class tpw implements CommandExecutor {
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s, String[] args) {
diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/completers/mcore_completer.java b/src/main/java/xyz/mineconomia/mineconomiacore/completers/mcore_completer.java
deleted file mode 100644
index a051944..0000000
--- a/src/main/java/xyz/mineconomia/mineconomiacore/completers/mcore_completer.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package xyz.mineconomia.mineconomiacore.completers;
-//Zde nic zatÃm
-public class mcore_completer {
-
-}
diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/config.java b/src/main/java/xyz/mineconomia/mineconomiacore/config.java
new file mode 100644
index 0000000..8c19ba7
--- /dev/null
+++ b/src/main/java/xyz/mineconomia/mineconomiacore/config.java
@@ -0,0 +1,8 @@
+package xyz.mineconomia.mineconomiacore;
+
+import org.bukkit.configuration.file.FileConfiguration;
+
+public interface config {
+ FileConfiguration config = MineconomiaCore.getPlugin(MineconomiaCore.class).getConfig();
+}
+
diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/events/playerAccount.java b/src/main/java/xyz/mineconomia/mineconomiacore/events/playerAccount.java
index 819797f..5cd78fc 100644
--- a/src/main/java/xyz/mineconomia/mineconomiacore/events/playerAccount.java
+++ b/src/main/java/xyz/mineconomia/mineconomiacore/events/playerAccount.java
@@ -2,16 +2,13 @@ package xyz.mineconomia.mineconomiacore.events;
import com.arangodb.ArangoCollection;
import com.arangodb.entity.BaseDocument;
-import com.arangodb.model.DocumentCreateOptions;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import xyz.mineconomia.mineconomiacore.MineconomiaCore;
-import java.util.EventListener;
import java.util.Map;
-import java.util.Objects;
import static xyz.mineconomia.mineconomiacore.database.database;
diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/events/specialEvents.java b/src/main/java/xyz/mineconomia/mineconomiacore/events/specialEvents.java
new file mode 100644
index 0000000..9e542ec
--- /dev/null
+++ b/src/main/java/xyz/mineconomia/mineconomiacore/events/specialEvents.java
@@ -0,0 +1,120 @@
+package xyz.mineconomia.mineconomiacore.events;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Location;
+import org.bukkit.boss.BarColor;
+import org.bukkit.boss.BarStyle;
+import org.bukkit.boss.BossBar;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.event.player.PlayerItemHeldEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.persistence.PersistentDataType;
+import xyz.mineconomia.mineconomiacore.PDC;
+
+import java.util.HashMap;
+import java.util.Objects;
+
+
+//These events are handling every logic of the "special item"
+//Special item = item that is essential to marking blocks for interaction with plugin creation and edit functions
+public class specialEvents implements Listener {
+ //Stores informative boss bars
+ public static HashMap specialBossBars = new HashMap<>();
+
+ //Stores locations marked by player using special item
+ public static HashMap> specialPreLocations = new HashMap<>();
+
+ //Checks if player is holding special item in hand and if so deploys boss bar
+ @EventHandler
+ public static void specialInHand(PlayerItemHeldEvent event){
+ Player player = event.getPlayer();
+ displayBossBar(player, player.getInventory().getItem(event.getNewSlot()));
+ }
+ @EventHandler
+ public static void savePosition(PlayerInteractEvent event){
+ Player player = event.getPlayer();
+ if (event.getItem() != null){
+ if (isSpecial(event.getItem())){
+ event.setCancelled(true);
+ switch (event.getAction()){
+ case LEFT_CLICK_BLOCK:
+ specialPreLocations.get(player).put("loc1", Objects.requireNonNull(event.getClickedBlock()).getLocation());
+ break;
+ case RIGHT_CLICK_BLOCK:
+ specialPreLocations.get(player).put("loc2", Objects.requireNonNull(event.getClickedBlock()).getLocation());
+ }
+ displayBossBar(player, event.getItem());
+
+ }
+ }
+ }
+
+ private static void displayBossBar(Player player, ItemStack item){
+ if (!specialPreLocations.containsKey(player)){
+ specialPreLocations.put(player, new HashMap<>());
+ }
+ if (specialBossBars.get(player) == null){
+ BossBar bossBar = Bukkit.createBossBar( "", BarColor.YELLOW , BarStyle.SOLID);
+
+ specialBossBars.put(player, bossBar);
+ }
+ BossBar bossBar = specialBossBars.get(player);
+ if (item != null){
+ if (isSpecial(item)){
+ String loc1String = "&6&lL &e(-,-,-,-)";
+ String loc2String = "&e(-,-,-,-) &6&lP";
+
+ HashMap playerLocations = specialPreLocations.get(player);
+ bossBar.setProgress(0);
+
+ if (playerLocations.containsKey("loc1")){
+ Location loc1 = playerLocations.get("loc1");
+ loc1String = "&6&lL &e("
+ + loc1.getBlockX()
+ + ","
+ + loc1.getBlockY()
+ + ","
+ + loc1.getBlockZ()
+ + ","
+ + Objects.requireNonNull(loc1.getWorld()).getName()
+ + ")";
+ }
+ if (playerLocations.containsKey("loc2")){
+ Location loc2 = playerLocations.get("loc2");
+ loc2String = "&e("
+ + loc2.getBlockX()
+ + ","
+ + loc2.getBlockY()
+ + ","
+ + loc2.getBlockZ()
+ + ","
+ + Objects.requireNonNull(loc2.getWorld()).getName()
+ + ") &6&lP";
+ }
+
+ String bossBarTitle = loc1String + " " + loc2String;
+ switch (playerLocations.size()){
+ case 1:
+ bossBar.setProgress(0.5);
+ break;
+ case 2:
+ bossBarTitle = bossBarTitle.replace("&6","&2").replace("&e", "&a");
+ bossBar.setColor(BarColor.GREEN);
+ bossBar.setProgress(1);
+ }
+ bossBar.setTitle(ChatColor.translateAlternateColorCodes('&', bossBarTitle));
+ bossBar.addPlayer(player);
+ return;
+ }
+ }
+ bossBar.removePlayer(player);
+ }
+ private static boolean isSpecial(ItemStack itemStack){
+ return PDC.GetItemMetaPDC(Objects.requireNonNull(itemStack.getItemMeta()), "special", PersistentDataType.BOOLEAN) != null;
+ }
+
+}
diff --git a/src/main/java/xyz/mineconomia/mineconomiacore/handlers/FHBHandler.java b/src/main/java/xyz/mineconomia/mineconomiacore/handlers/FHBHandler.java
index 2dfb6e7..1bf8487 100644
--- a/src/main/java/xyz/mineconomia/mineconomiacore/handlers/FHBHandler.java
+++ b/src/main/java/xyz/mineconomia/mineconomiacore/handlers/FHBHandler.java
@@ -3,8 +3,6 @@ package xyz.mineconomia.mineconomiacore.handlers;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.block.data.Ageable;
-import org.bukkit.block.data.BlockData;
-
import org.bukkit.entity.Player;
import org.bukkit.entity.Snowball;
import org.bukkit.event.EventHandler;
@@ -13,7 +11,6 @@ import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.inventory.ItemStack;
import xyz.mineconomia.mineconomiacore.MineconomiaCore;
-
import java.util.Objects;
import java.util.Random;
import java.util.concurrent.TimeUnit;