Resolved command issues.

Added system to add time to anchors based on the epic series upgrade system.
Removed level system.
Fixed anchor stacking.
Added the optional ability to allow anchors to drop when broken.
This commit is contained in:
Brianna O'Keefe 2018-09-09 17:13:47 -04:00
parent af1091017c
commit 22cc5f9734
18 changed files with 142 additions and 201 deletions

View File

@ -1,16 +1,13 @@
package com.songoda.epicanchors.api;
import com.songoda.epicanchors.api.anchor.AnchorManager;
import com.songoda.epicanchors.api.anchor.Level;
import com.songoda.epicanchors.api.anchor.LevelManager;
import org.bukkit.inventory.ItemStack;
public interface EpicAnchors {
int getLevelFromItem(ItemStack item);
ItemStack makeAnchorItem(Level level);
int getTicksFromItem(ItemStack item);
LevelManager getLevelManager();
ItemStack makeAnchorItem(int ticks);
AnchorManager getAnchorManager();
}

View File

@ -1,11 +0,0 @@
package com.songoda.epicanchors.api.anchor;
public interface Level {
int getLevel();
void setLevel(int level);
int getTicks();
void setTicks(int ticks);
}

View File

@ -1,15 +0,0 @@
package com.songoda.epicanchors.api.anchor;
import java.util.Map;
public interface LevelManager {
void addLevel(int level, int ticks);
Level getLevel(int level);
Level getLowestLevel();
Level getHighestLevel();
Map<Integer, Level> getLevels();
}

View File

@ -5,13 +5,9 @@ import com.songoda.arconix.api.utils.ConfigWrapper;
import com.songoda.arconix.plugin.Arconix;
import com.songoda.epicanchors.anchor.EAnchor;
import com.songoda.epicanchors.anchor.EAnchorManager;
import com.songoda.epicanchors.anchor.ELevel;
import com.songoda.epicanchors.anchor.ELevelManager;
import com.songoda.epicanchors.api.EpicAnchors;
import com.songoda.epicanchors.api.anchor.Anchor;
import com.songoda.epicanchors.api.anchor.AnchorManager;
import com.songoda.epicanchors.api.anchor.Level;
import com.songoda.epicanchors.api.anchor.LevelManager;
import com.songoda.epicanchors.command.CommandManager;
import com.songoda.epicanchors.events.BlockListeners;
import com.songoda.epicanchors.events.InteractListeners;
@ -38,7 +34,6 @@ public class EpicAnchorsPlugin extends JavaPlugin implements EpicAnchors {
private SettingsManager settingsManager;
private EAnchorManager anchorManager;
private ELevelManager levelManager;
private MenuHandler menuHandler;
public References references = null;
@ -49,7 +44,7 @@ public class EpicAnchorsPlugin extends JavaPlugin implements EpicAnchors {
return INSTANCE;
}
private void checkVersion() {
private boolean checkVersion() {
int workingVersion = 13;
int currentVersion = Integer.parseInt(Bukkit.getServer().getClass()
.getPackage().getName().split("\\.")[3].split("_")[1]);
@ -60,13 +55,15 @@ public class EpicAnchorsPlugin extends JavaPlugin implements EpicAnchors {
Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "You installed the 1." + workingVersion + "+ only version of " + this.getDescription().getName() + " on a 1." + currentVersion + " server. Since you are on the wrong version we disabled the plugin for you. Please install correct version to continue using " + this.getDescription().getName() + ".");
Bukkit.getConsoleSender().sendMessage("");
}, 20L);
return false;
}
return true;
}
@Override
public void onEnable() {
// Check to make sure the Bukkit version is compatible.
checkVersion();
if (!checkVersion()) return;
INSTANCE = this;
CommandSender console = Bukkit.getConsoleSender();
@ -88,7 +85,6 @@ public class EpicAnchorsPlugin extends JavaPlugin implements EpicAnchors {
setupConfig();
loadLevelManager();
loadAnchorsFromFile();
new AnchorHandler(this);
@ -115,6 +111,13 @@ public class EpicAnchorsPlugin extends JavaPlugin implements EpicAnchors {
console.sendMessage(TextComponent.formatText("&a============================="));
}
private void setupConfig() {
settingsManager.updateSettings();
getConfig().options().copyDefaults(true);
saveConfig();
}
private void loadAnchorsFromFile() {
if (dataFile.getConfig().contains("Anchors")) {
for (String locationStr : dataFile.getConfig().getConfigurationSection("Anchors").getKeys(false)) {
@ -128,21 +131,6 @@ public class EpicAnchorsPlugin extends JavaPlugin implements EpicAnchors {
}
}
private void loadLevelManager() {
// Load an instance of LevelManager
levelManager = new ELevelManager();
/*
* Register Levels into LevelManager from configuration.
*/
levelManager.clear();
for (String levelName : getConfig().getConfigurationSection("settings.levels").getKeys(false)) {
int level = Integer.valueOf(levelName.split("-")[1]);
int ticks = getConfig().getInt("settings.levels." + levelName + ".Ticks");
levelManager.addLevel(level, ticks);
}
}
private void saveToFile() {
dataFile.getConfig().set("Anchors", null);
for (Anchor anchor : anchorManager.getAnchors().values()) {
@ -161,22 +149,8 @@ public class EpicAnchorsPlugin extends JavaPlugin implements EpicAnchors {
//this.saveConfig();
}
private void setupConfig() {
settingsManager.updateSettings();
getConfig().addDefault("settings.levels.Level-1.Ticks", 20 * 60 * 60); //1 Hours
getConfig().addDefault("settings.levels.Level-2.Ticks", 20 * 60 * 60 * 3); //3 Hours
getConfig().addDefault("settings.levels.Level-3.Ticks", 20 * 60 * 60 * 5); //5 Hours
getConfig().options().copyDefaults(true);
saveConfig();
}
@Override
public int getLevelFromItem(ItemStack item) {
public int getTicksFromItem(ItemStack item) {
if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) return 0;
if (item.getItemMeta().getDisplayName().contains(":")) {
return NumberUtils.toInt(item.getItemMeta().getDisplayName().replace("\u00A7", "").split(":")[0], 0);
@ -185,19 +159,14 @@ public class EpicAnchorsPlugin extends JavaPlugin implements EpicAnchors {
}
@Override
public ItemStack makeAnchorItem(Level level) {
public ItemStack makeAnchorItem(int ticks) {
ItemStack item = new ItemStack(Material.valueOf(EpicAnchorsPlugin.getInstance().getConfig().getString("Main.Anchor Block Material")), 1);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(Arconix.pl().getApi().format().formatText(Methods.formatName(level, true)));
meta.setDisplayName(Arconix.pl().getApi().format().formatText(Methods.formatName(ticks, true)));
item.setItemMeta(meta);
return item;
}
@Override
public LevelManager getLevelManager() {
return levelManager;
}
public MenuHandler getMenuHandler() {
return menuHandler;
}

View File

@ -3,16 +3,17 @@ package com.songoda.epicanchors.anchor;
import com.songoda.arconix.api.methods.formatting.TextComponent;
import com.songoda.arconix.api.methods.formatting.TimeComponent;
import com.songoda.epicanchors.api.anchor.Anchor;
import com.songoda.epicanchors.api.anchor.Level;
import com.songoda.epicanchors.utils.Methods;
import com.songoda.arconix.plugin.Arconix;
import com.songoda.epicanchors.EpicAnchorsPlugin;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import com.songoda.epicanchors.api.anchor.Anchor;
import com.songoda.epicanchors.utils.Methods;
import net.milkbowl.vault.economy.Economy;
import org.bukkit.*;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.RegisteredServiceProvider;
import java.util.ArrayList;
import java.util.List;
@ -23,10 +24,6 @@ public class EAnchor implements Anchor {
private Location location;
private int ticksLeft;
public EAnchor(Location location, Level level) {
this(location, level.getTicks());
}
public EAnchor(Location location, int ticksLeft) {
this.location = location;
this.ticksLeft = ticksLeft;
@ -61,7 +58,23 @@ public class EAnchor implements Anchor {
inventory.setItem(25, Methods.getBackgroundGlass(true));
inventory.setItem(26, Methods.getBackgroundGlass(true));
ItemStack item = instance.makeAnchorItem(EpicAnchorsPlugin.getInstance().getLevelManager().getLowestLevel());
ItemStack itemXP = new ItemStack(Material.valueOf(instance.getConfig().getString("Interfaces.XP Icon")), 1);
ItemMeta itemmetaXP = itemXP.getItemMeta();
itemmetaXP.setDisplayName(instance.getLocale().getMessage("interface.button.addtimewithxp"));
ArrayList<String> loreXP = new ArrayList<>();
loreXP.add(instance.getLocale().getMessage("interface.button.addtimewithxplore", Integer.toString(instance.getConfig().getInt("Main.XP Cost"))));
itemmetaXP.setLore(loreXP);
itemXP.setItemMeta(itemmetaXP);
ItemStack itemECO = new ItemStack(Material.valueOf(instance.getConfig().getString("Interfaces.Economy Icon")), 1);
ItemMeta itemmetaECO = itemECO.getItemMeta();
itemmetaECO.setDisplayName(instance.getLocale().getMessage("interface.button.addtimewitheconomy"));
ArrayList<String> loreECO = new ArrayList<>();
loreECO.add(instance.getLocale().getMessage("interface.button.addtimewitheconomylore", Arconix.pl().getApi().format().formatEconomy(instance.getConfig().getInt("Main.Economy Cost"))));
itemmetaECO.setLore(loreECO);
itemECO.setItemMeta(itemmetaECO);
ItemStack item = instance.makeAnchorItem(ticksLeft);
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(TextComponent.formatText(instance.getLocale().getMessage("interface.anchor.smalltitle")));
List<String> lore = new ArrayList<>();
@ -72,10 +85,54 @@ public class EAnchor implements Anchor {
item.setItemMeta(meta);
inventory.setItem(13, item);
if (instance.getConfig().getBoolean("Main.Add Time With Economy")) {
inventory.setItem(11, itemXP);
}
if (instance.getConfig().getBoolean("Main.Add Time With XP")) {
inventory.setItem(15, itemECO);
}
player.openInventory(inventory);
EpicAnchorsPlugin.getInstance().getMenuHandler().addPlayer(player, location);
}
public void addTime(String type, Player player) {
EpicAnchorsPlugin instance = EpicAnchorsPlugin.getInstance();
if (type.equals("ECO")) {
if (instance.getServer().getPluginManager().getPlugin("Vault") != null) {
RegisteredServiceProvider<Economy> rsp = instance.getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
net.milkbowl.vault.economy.Economy econ = rsp.getProvider();
double cost = instance.getConfig().getDouble("Main.Add Time With Economy");
if (econ.has(player, cost)) {
econ.withdrawPlayer(player, cost);
} else {
player.sendMessage(instance.getLocale().getMessage("event.upgrade.cannotafford"));
return;
}
} else {
player.sendMessage("Vault is not installed.");
return;
}
} else if (type.equals("XP")) {
int cost = instance.getConfig().getInt("Main.Add Time With XP");
if (player.getLevel() >= cost || player.getGameMode() == GameMode.CREATIVE) {
if (player.getGameMode() != GameMode.CREATIVE) {
player.setLevel(player.getLevel() - cost);
}
} else {
player.sendMessage(instance.getLocale().getMessage("event.upgrade.cannotafford"));
return;
}
ticksLeft = ticksLeft + 20 * 60 * 30;
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.6F, 15.0F);
player.getWorld().spawnParticle(Particle.SPELL_WITCH, getLocation().add(.5,.5,.5), 100, .5, .5, .5);
}
}
@Override
public Location getLocation() {
return location.clone();

View File

@ -1,33 +0,0 @@
package com.songoda.epicanchors.anchor;
import com.songoda.epicanchors.api.anchor.Level;
public class ELevel implements com.songoda.epicanchors.api.anchor.Level {
private int level, ticks;
public ELevel(int level, int ticks) {
this.level = level;
this.ticks = ticks;
}
@Override
public int getLevel() {
return level;
}
@Override
public void setLevel(int level) {
this.level = level;
}
@Override
public int getTicks() {
return ticks;
}
@Override
public void setTicks(int ticks) {
this.ticks = ticks;
}
}

View File

@ -1,44 +0,0 @@
package com.songoda.epicanchors.anchor;
import com.songoda.epicanchors.api.anchor.LevelManager;
import com.songoda.epicanchors.api.anchor.Level;
import java.util.Collections;
import java.util.Map;
import java.util.NavigableMap;
import java.util.TreeMap;
public class ELevelManager implements LevelManager {
private final NavigableMap<Integer, Level> registeredLevels = new TreeMap<>();
@Override
public void addLevel(int level, int ticks) {
registeredLevels.put(level, new ELevel(level, ticks));
}
@Override
public Level getLevel(int level) {
return registeredLevels.get(level);
}
@Override
public Level getLowestLevel() {
return registeredLevels.firstEntry().getValue();
}
@Override
public Level getHighestLevel() {
return registeredLevels.lastEntry().getValue();
}
@Override
public Map<Integer, Level> getLevels() {
return Collections.unmodifiableMap(registeredLevels);
}
public void clear() {
registeredLevels.clear();
}
}

View File

@ -19,8 +19,8 @@ public class CommandEpicAnchors extends AbstractCommand {
sender.sendMessage(TextComponent.formatText("&6/EpicAnchors&7 - Displays this page."));
if (sender.hasPermission("epicanchors.admin")) {
sender.sendMessage(TextComponent.formatText("&6/eca reload &7Reload the Configuration and Language files."));
sender.sendMessage(TextComponent.formatText("&6/eca give <player> <amount in hours> &7 - Gives an operator the ability to spawn a ChunkAnchor of his or her choice."));
sender.sendMessage(TextComponent.formatText("&6/ea reload &7Reload the Configuration and Language files."));
sender.sendMessage(TextComponent.formatText("&6/ea give <player/all> <amount in hours> &7 - Gives an operator the ability to spawn a ChunkAnchor of his or her choice."));
}
sender.sendMessage("");

View File

@ -1,10 +1,7 @@
package com.songoda.epicanchors.command.commands;
import com.songoda.arconix.api.methods.formatting.TextComponent;
import com.songoda.epicanchors.anchor.ELevel;
import com.songoda.epicanchors.api.anchor.Level;
import com.songoda.epicanchors.command.AbstractCommand;
import com.songoda.epicanchors.utils.Methods;
import com.songoda.epicanchors.EpicAnchorsPlugin;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
@ -26,9 +23,7 @@ public class CommandGive extends AbstractCommand {
return true;
}
Level level = instance.getLevelManager().getLevel(Integer.parseInt(args[2]));
ItemStack itemStack = instance.makeAnchorItem(level);
ItemStack itemStack = instance.makeAnchorItem(Integer.parseInt(args[2]) * 20 * 60 * 60);
if (!args[1].trim().toLowerCase().equals("all")) {
Player player = Bukkit.getOfflinePlayer(args[1]).getPlayer();

View File

@ -1,11 +1,11 @@
package com.songoda.epicanchors.events;
import com.songoda.epicanchors.anchor.EAnchor;
import com.songoda.epicanchors.anchor.ELevel;
import com.songoda.epicanchors.api.anchor.Level;
import com.songoda.epicanchors.utils.Methods;
import com.songoda.epicanchors.EpicAnchorsPlugin;
import com.songoda.epicanchors.api.anchor.Anchor;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
@ -29,18 +29,20 @@ public class BlockListeners implements Listener {
if (!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) return;
if (instance.getLevelFromItem(item) == 0) return;
if (instance.getTicksFromItem(item) == 0) return;
Level level = instance.getLevelManager().getLevel(instance.getLevelFromItem(item));
instance.getAnchorManager().addAnchor(event.getBlock().getLocation(), new EAnchor(event.getBlock().getLocation(), level));
instance.getAnchorManager().addAnchor(event.getBlock().getLocation(), new EAnchor(event.getBlock().getLocation(), instance.getTicksFromItem(item)));
}
@EventHandler(ignoreCancelled = true)
public void onBlockBreak(BlockBreakEvent event) {
Anchor anchor = instance.getAnchorManager().getAnchor(event.getBlock().getLocation());
if (instance.getConfig().getBoolean("Main.Allow Anchor Breaking")) {
ItemStack item = instance.makeAnchorItem(anchor.getTicksLeft());
anchor.getLocation().getWorld().dropItemNaturally(anchor.getLocation(), item);
}
instance.getAnchorManager().removeAnchor(event.getBlock().getLocation());
}
}

View File

@ -1,13 +1,12 @@
package com.songoda.epicanchors.events;
import com.songoda.epicanchors.anchor.EAnchor;
import com.songoda.epicanchors.anchor.ELevel;
import com.songoda.epicanchors.api.anchor.Anchor;
import com.songoda.epicanchors.api.anchor.Level;
import com.songoda.epicanchors.utils.Methods;
import com.songoda.epicanchors.EpicAnchorsPlugin;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -37,18 +36,17 @@ public class InteractListeners implements Listener {
Player player = e.getPlayer();
ItemStack item = player.getItemInHand();
if (item.getType() == Material.valueOf(instance.getConfig().getString("Main.Anchor Block Material"))) {
if (instance.getLevelFromItem(item) == 0) return;
if (instance.getTicksFromItem(item) == 0) return;
Level level = instance.getLevelManager().getLevel(instance.getLevelFromItem(item));
anchor.setTicksLeft(anchor.getTicksLeft() + level.getTicks());
anchor.setTicksLeft(anchor.getTicksLeft() + instance.getTicksFromItem(item));
if (player.getGameMode() != GameMode.CREATIVE)
Methods.takeItem(player, 1);
player.playSound(player.getLocation(), Sound.valueOf("LEVEL_UP"), 2F, 25.0F);
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 0.6F, 15.0F);
player.getWorld().playEffect(anchor.getLocation().add(.5,.5,.5), org.bukkit.Effect.valueOf("WITCH_MAGIC"), 1, 0);
player.getWorld().spawnParticle(Particle.SPELL_WITCH, anchor.getLocation().add(.5,.5,.5), 100, .5, .5, .5);
e.setCancelled(true);

View File

@ -1,6 +1,8 @@
package com.songoda.epicanchors.events;
import com.songoda.epicanchors.EpicAnchorsPlugin;
import com.songoda.epicanchors.anchor.EAnchor;
import com.songoda.epicanchors.api.anchor.Anchor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
@ -19,15 +21,27 @@ public class InventoryListeners implements Listener {
public void onInventoryClick(InventoryClickEvent event) {
if (event.getInventory() == null || event.getRawSlot() >= event.getView().getTopInventory().getSize()) return;
Player player = (Player)event.getWhoClicked();
Player player = (Player) event.getWhoClicked();
if (!instance.getMenuHandler().isPlayerInMenu(player)) return;
Anchor anchor = instance.getMenuHandler().getAnchor(player);
event.setCancelled(true);
if (event.getSlot() == 11 && instance.getConfig().getBoolean("Main.Add Time With XP")) {
if (!event.getCurrentItem().getItemMeta().getDisplayName().equals("§l")) {
((EAnchor) anchor).addTime("XP", player);
}
} else if (event.getSlot() == 15 && instance.getConfig().getBoolean("Main.Add Time With Economy")) {
if (!event.getCurrentItem().getItemMeta().getDisplayName().equals("§l")) {
((EAnchor) anchor).addTime("ECO", player);
}
}
}
@EventHandler()
public void onInventoryClose(InventoryCloseEvent event) {
instance.getMenuHandler().removePlayer((Player)event.getPlayer());
instance.getMenuHandler().removePlayer((Player) event.getPlayer());
}
}

View File

@ -71,7 +71,7 @@ public class AnchorHandler {
for (int z = cz; z < cz + 16; z++) {
for (int y = 0; y < location.getWorld().getMaxHeight(); y++) {
Block block = location.getWorld().getBlockAt(x, y, z);
if (block.getType() != Material.MOB_SPAWNER) continue;
if (block.getType() != Material.SPAWNER) continue;
Spawner spawner = EpicSpawnersAPI.getSpawnerManager().getSpawnerFromWorld(block.getLocation());
if (!delays.containsKey(block.getLocation())) {
if (block == null || block.getLocation() == null || spawner == null) continue;

View File

@ -2,6 +2,7 @@ package com.songoda.epicanchors.handlers;
import com.songoda.epicanchors.EpicAnchorsPlugin;
import com.songoda.epicanchors.anchor.EAnchor;
import com.songoda.epicanchors.api.anchor.Anchor;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
@ -28,6 +29,10 @@ public class MenuHandler {
}
}
public Anchor getAnchor(Player player) {
return instance.getAnchorManager().getAnchor(playersInMenu.get(player.getUniqueId()));
}
public void addPlayer(Player player, Location location) {
playersInMenu.put(player.getUniqueId(), location);
}

View File

@ -2,14 +2,9 @@ package com.songoda.epicanchors.utils;
import com.songoda.arconix.plugin.Arconix;
import com.songoda.epicanchors.EpicAnchorsPlugin;
import com.songoda.epicanchors.anchor.ELevel;
import com.songoda.epicanchors.api.anchor.Level;
import org.apache.commons.lang.math.NumberUtils;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
public class Methods {
@ -42,8 +37,8 @@ public class Methods {
}
}
public static String formatName(Level level, boolean full) {
int ticks = (((level.getTicks() / 20) / 60) / 60);
public static String formatName(int ticks2, boolean full) {
int ticks = (((ticks2 / 20) / 60) / 60);
String hours = "Hours";
if (ticks == 1) hours = "Hour";
@ -51,7 +46,7 @@ public class Methods {
String info = "";
if (full) {
info += Arconix.pl().getApi().format().convertToInvisibleString(level.getLevel() + ":");
info += Arconix.pl().getApi().format().convertToInvisibleString(ticks2 + ":");
}
return info + Arconix.pl().getApi().format().formatText(name);

View File

@ -22,10 +22,17 @@ public class SettingsManager implements Listener {
}
public enum settings {
o8("Main.Anchor Block Material", "ENDER_PORTAL_FRAME"),
o11("Interfaces.Glass Type 1", 7),
o12("Interfaces.Glass Type 2", 11),
o13("Interfaces.Glass Type 3", 3);
o1("Main.Anchor Block Material", "END_PORTAL_FRAME"),
o2("Main.Add Time With Economy", true),
o3("Main.Economy Cost", 5000.0),
o4("Main.Add Time With XP", true),
o5("Main.XP Cost", 10),
o6("Main.Allow Anchor Breaking", false),
o7("Interfaces.Economy Icon", "SUNFLOWER"),
o8("Interfaces.XP Icon", "EXPERIENCE_BOTTLE"),
o9("Interfaces.Glass Type 1", 7),
o10("Interfaces.Glass Type 2", 11),
o11("Interfaces.Glass Type 3", 3);
private String setting;
private Object option;

View File

@ -7,6 +7,10 @@ general.nametag.nameformat = "&eLevel %level% &fFurnace"
#Interface Messages
interface.button.addtimewithxp = "&aAdd 30 Minutes with XP"
interface.button.addtimewithxplore = "&7Cost: &a%cost% Levels"
interface.button.addtimewitheconomy = "&aAdd 30 Minutes with ECO"
interface.button.addtimewitheconomylore = "&7Cost: &a$%cost%"
interface.anchor.title = "ChunkAnchor";
interface.anchor.smalltitle = "&eChunkAnchor";

View File

@ -4,6 +4,7 @@ version: 1
depend: [Arconix]
main: com.songoda.epicanchors.EpicAnchorsPlugin
author: songoda
api-version: 1.13
commands:
EpicAnchors:
description: I have no idea.