diff --git a/build.gradle b/build.gradle index 443315c..62cdead 100644 --- a/build.gradle +++ b/build.gradle @@ -19,16 +19,19 @@ repositories { maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' } maven { url 'https://oss.sonatype.org/content/groups/public/' } maven { url 'https://jitpack.io' } + maven { url 'https://ci.ender.zone/plugin/repository/everything/' } + maven { url 'https://papermc.io/repo/repository/maven-public/' } } dependencies { compileOnly(files('libs/paper-server-1.8.8-R0.1.jar')) compile('org.projectlombok:lombok:1.16.20') - annotationProcessor ('org.projectlombok:lombok:1.16.20') - compileOnly ('com.github.MilkBowl:VaultAPI:1.7') { + annotationProcessor('org.projectlombok:lombok:1.16.20') + compileOnly('com.github.MilkBowl:VaultAPI:1.7') { exclude group: 'org.bukkit' exclude group: 'org.spigot' } + compileOnly('net.ess3:EssentialsX:2.17.0') } clean { diff --git a/src/main/java/me/loganb1max/minionsplus/MinionsPlus.java b/src/main/java/me/loganb1max/minionsplus/MinionsPlus.java index 5487dd6..65663d7 100644 --- a/src/main/java/me/loganb1max/minionsplus/MinionsPlus.java +++ b/src/main/java/me/loganb1max/minionsplus/MinionsPlus.java @@ -1,5 +1,6 @@ package me.loganb1max.minionsplus; +import com.earth2me.essentials.Essentials; import lombok.Getter; import me.loganb1max.minionsplus.command.MinionCommand; import me.loganb1max.minionsplus.manager.LinkingManager; @@ -15,6 +16,7 @@ public class MinionsPlus extends JavaPlugin { @Getter private static MinionsPlus instance; @Getter private static Economy econ; + @Getter private static Essentials essentials; @Getter private MinionManager minionManager; @Getter private LinkingManager linkingManager; private MinionCommand minionCommand; @@ -24,6 +26,7 @@ public class MinionsPlus extends JavaPlugin { instance = this; saveDefaultConfig(); setupEconomy(); + essentials = getPlugin(Essentials.class); this.minionManager = new MinionManager(this); this.linkingManager = new LinkingManager(this); this.minionCommand = new MinionCommand(); diff --git a/src/main/java/me/loganb1max/minionsplus/command/MinionCommand.java b/src/main/java/me/loganb1max/minionsplus/command/MinionCommand.java index 05ad251..8739857 100644 --- a/src/main/java/me/loganb1max/minionsplus/command/MinionCommand.java +++ b/src/main/java/me/loganb1max/minionsplus/command/MinionCommand.java @@ -3,9 +3,7 @@ package me.loganb1max.minionsplus.command; import com.google.common.collect.ImmutableList; import me.loganb1max.minionsplus.MinionsPlus; import me.loganb1max.minionsplus.model.Minion; -import me.loganb1max.minionsplus.model.minions.FarmerMinion; -import me.loganb1max.minionsplus.model.minions.FisherMinion; -import me.loganb1max.minionsplus.model.minions.MinerMinion; +import me.loganb1max.minionsplus.model.minions.*; import me.loganb1max.minionsplus.util.ItemUtil; import me.loganb1max.minionsplus.util.Text; import org.bukkit.Bukkit; @@ -67,6 +65,18 @@ public class MinionCommand implements CommandExecutor, TabCompleter { case "fisher": minion = new FisherMinion(target.getUniqueId(), target.getName()); break; + case "seller": + minion = new SellerMinion(target.getUniqueId(), target.getName()); + break; + case "butcher": + minion = new ButcherMinion(target.getUniqueId(), target.getName()); + break; + case "collector": + minion = new CollectorMinion(target.getUniqueId(), target.getName()); + break; + case "breeder": + minion = new BreederMinion(target.getUniqueId(), target.getName()); + break; } if (minion == null) { @@ -100,7 +110,11 @@ public class MinionCommand implements CommandExecutor, TabCompleter { toReturn = ImmutableList.of( "miner", "farmer", - "fisher" + "fisher", + "seller", + "butcher", + "collector", + "breeder" ); break; } diff --git a/src/main/java/me/loganb1max/minionsplus/manager/MinionManager.java b/src/main/java/me/loganb1max/minionsplus/manager/MinionManager.java index e96b211..e10580e 100644 --- a/src/main/java/me/loganb1max/minionsplus/manager/MinionManager.java +++ b/src/main/java/me/loganb1max/minionsplus/manager/MinionManager.java @@ -5,19 +5,24 @@ import lombok.Getter; import me.loganb1max.minionsplus.MinionsPlus; import me.loganb1max.minionsplus.menu.MinionMenu; import me.loganb1max.minionsplus.model.Minion; +import me.loganb1max.minionsplus.model.minions.ButcherMinion; import me.loganb1max.minionsplus.model.minions.MinerMinion; import me.loganb1max.minionsplus.util.ItemUtil; import me.loganb1max.minionsplus.util.Text; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.LivingEntity; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.player.PlayerArmorStandManipulateEvent; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitTask; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -25,15 +30,14 @@ import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; +import java.util.*; public class MinionManager implements Listener { private final MinionsPlus plugin; private final BukkitTask animationTask; private final BukkitTask tickTask; + @Getter private final Map butcherKillMap = new HashMap<>(); @Getter private Set minions = new HashSet<>(); @@ -132,4 +136,20 @@ public class MinionManager implements Listener { ItemUtil.consumeItem(e.getPlayer().getInventory(), 1, e.getItem()); } + @EventHandler + public void onLivingEntityDeath(final EntityDeathEvent e) { + if (!this.butcherKillMap.containsKey(e.getEntity())) return; + final ButcherMinion minion = this.butcherKillMap.remove(e.getEntity()); + final List drops = e.getDrops(); + minion.getLinkedBlocks().stream().filter(b -> b.getState() instanceof InventoryHolder).forEachOrdered(b -> { + InventoryHolder inv = (InventoryHolder) b.getState(); + final Collection remaining = inv.getInventory().addItem(drops.toArray(new ItemStack[] {})).values(); + drops.clear(); + drops.addAll(remaining); + }); + if (!drops.isEmpty()) { + drops.forEach(item -> minion.getLocation().getWorld().dropItemNaturally(minion.getLocation(), item)); + } + } + } diff --git a/src/main/java/me/loganb1max/minionsplus/model/Minion.java b/src/main/java/me/loganb1max/minionsplus/model/Minion.java index 33ad370..3643272 100644 --- a/src/main/java/me/loganb1max/minionsplus/model/Minion.java +++ b/src/main/java/me/loganb1max/minionsplus/model/Minion.java @@ -7,9 +7,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import me.loganb1max.minionsplus.MinionsPlus; -import me.loganb1max.minionsplus.model.minions.FarmerMinion; -import me.loganb1max.minionsplus.model.minions.FisherMinion; -import me.loganb1max.minionsplus.model.minions.MinerMinion; +import me.loganb1max.minionsplus.model.minions.*; import me.loganb1max.minionsplus.util.*; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -20,7 +18,6 @@ import org.bukkit.entity.ArmorStand; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; - import java.text.DecimalFormat; import java.util.*; @@ -238,6 +235,18 @@ public abstract class Minion { case "Fisher": toReturn = new FisherMinion(owner, ownerName, location, energy, level, linkedBlocks); break; + case "Seller": + toReturn = new SellerMinion(owner, ownerName, location, energy, level, linkedBlocks); + break; + case "Butcher": + toReturn = new ButcherMinion(owner, ownerName, location, energy, level, linkedBlocks); + break; + case "Collector": + toReturn = new CollectorMinion(owner, ownerName, location, energy, level, linkedBlocks); + break; + case "Breeder": + toReturn = new BreederMinion(owner, ownerName, location, energy, level, linkedBlocks); + break; } return toReturn; } @@ -265,6 +274,18 @@ public abstract class Minion { case "Fisher": toReturn = new FisherMinion(owner, ownerName, location, energy, level, new HashSet<>()); break; + case "Seller": + toReturn = new SellerMinion(owner, ownerName, location, energy, level, new HashSet<>()); + break; + case "Butcher": + toReturn = new ButcherMinion(owner, ownerName, location, energy, level, new HashSet<>()); + break; + case "Collector": + toReturn = new CollectorMinion(owner, ownerName, location, energy, level, new HashSet<>()); + break; + case "Breeder": + toReturn = new BreederMinion(owner, ownerName, location, energy, level, new HashSet<>()); + break; } return toReturn; } diff --git a/src/main/java/me/loganb1max/minionsplus/model/minions/BreederMinion.java b/src/main/java/me/loganb1max/minionsplus/model/minions/BreederMinion.java new file mode 100644 index 0000000..fe7d295 --- /dev/null +++ b/src/main/java/me/loganb1max/minionsplus/model/minions/BreederMinion.java @@ -0,0 +1,64 @@ +package me.loganb1max.minionsplus.model.minions; + +import me.loganb1max.minionsplus.MinionsPlus; +import me.loganb1max.minionsplus.model.Minion; +import me.loganb1max.minionsplus.util.Replacer; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.entity.*; +import java.text.DecimalFormat; +import java.util.Set; +import java.util.UUID; + +public class BreederMinion extends Minion { + + public BreederMinion(final UUID owner, final String ownerName) { + super( + MinionsPlus.getInstance().getConfig().getConfigurationSection("Breeder"), + owner, + ownerName + ); + } + + public BreederMinion(final UUID owner, final String ownerName, final Location location, final double energy, final int level, final Set linkedBlocks) { + this(owner, ownerName); + setLocation(location); + setEnergy(energy); + setLevel(level); + setLinkedBlocks(linkedBlocks); + findStand(); + } + + public int getRadius(final int level) { + return getSection().getInt("Levels." + level + ".Radius", 1); + } + + @Override + public void tick() { + if (getEnergy() < getEnergyPerUse(getLevel())) return; + final int radius = getRadius(getLevel()); + boolean useEnergy = false; + for (Entity e : getStand().getNearbyEntities(radius, radius, radius)) { + if (!(e instanceof Animals)) continue; + final Animals a = (Animals) e; + if (!a.canBreed()) return; + if (!a.isAdult()) return; + a.setBreed(false); + final Animals a2 = (Animals) getLocation().getWorld().spawnEntity(a.getLocation(), a.getType()); + a2.setBaby(); + useEnergy = true; + } + if (useEnergy) consumeEnergy(getEnergyPerUse(getLevel())); + } + + @Override + public Replacer getReplacer() { + final DecimalFormat format = new DecimalFormat("#.#"); + return Replacer.create() + .add("%level%", String.valueOf(getLevel())) + .add("%energy%", format.format(getEnergy())) + .add("%owner%", getOwnerName()) + .add("%radius%", String.valueOf(getRadius(getLevel()))); + } + +} diff --git a/src/main/java/me/loganb1max/minionsplus/model/minions/ButcherMinion.java b/src/main/java/me/loganb1max/minionsplus/model/minions/ButcherMinion.java new file mode 100644 index 0000000..6e54332 --- /dev/null +++ b/src/main/java/me/loganb1max/minionsplus/model/minions/ButcherMinion.java @@ -0,0 +1,63 @@ +package me.loganb1max.minionsplus.model.minions; + +import me.loganb1max.minionsplus.MinionsPlus; +import me.loganb1max.minionsplus.model.Minion; +import me.loganb1max.minionsplus.util.Replacer; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import java.text.DecimalFormat; +import java.util.*; + +public class ButcherMinion extends Minion { + + public ButcherMinion(final UUID owner, final String ownerName) { + super( + MinionsPlus.getInstance().getConfig().getConfigurationSection("Butcher"), + owner, + ownerName + ); + } + + public ButcherMinion(final UUID owner, final String ownerName, final Location location, final double energy, final int level, final Set linkedBlocks) { + this(owner, ownerName); + setLocation(location); + setEnergy(energy); + setLevel(level); + setLinkedBlocks(linkedBlocks); + findStand(); + } + + public int getRadius(final int level) { + return getSection().getInt("Levels." + level + ".Radius", 1); + } + + @Override + public void tick() { + if (getEnergy() < getEnergyPerUse(getLevel())) return; + final int radius = getRadius(getLevel()); + boolean useEnergy = false; + for (Entity e : getStand().getNearbyEntities(radius, radius, radius)) { + if (!(e instanceof LivingEntity)) continue; + if (e instanceof Player) continue; + LivingEntity le = (LivingEntity) e; + MinionsPlus.getInstance().getMinionManager().getButcherKillMap().put(le, this); + le.damage(Integer.MAX_VALUE); + useEnergy = true; + } + if (useEnergy) consumeEnergy(getEnergyPerUse(getLevel())); + } + + @Override + public Replacer getReplacer() { + final DecimalFormat format = new DecimalFormat("#.#"); + return Replacer.create() + .add("%level%", String.valueOf(getLevel())) + .add("%energy%", format.format(getEnergy())) + .add("%owner%", getOwnerName()) + .add("%radius%", String.valueOf(getRadius(getLevel()))); + } + +} diff --git a/src/main/java/me/loganb1max/minionsplus/model/minions/CollectorMinion.java b/src/main/java/me/loganb1max/minionsplus/model/minions/CollectorMinion.java new file mode 100644 index 0000000..ad5deff --- /dev/null +++ b/src/main/java/me/loganb1max/minionsplus/model/minions/CollectorMinion.java @@ -0,0 +1,78 @@ +package me.loganb1max.minionsplus.model.minions; + +import me.loganb1max.minionsplus.MinionsPlus; +import me.loganb1max.minionsplus.model.Minion; +import me.loganb1max.minionsplus.util.Replacer; +import org.bukkit.Location; +import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; +import org.bukkit.metadata.FixedMetadataValue; +import java.text.DecimalFormat; +import java.util.*; + +public class CollectorMinion extends Minion { + + public CollectorMinion(final UUID owner, final String ownerName) { + super( + MinionsPlus.getInstance().getConfig().getConfigurationSection("Collector"), + owner, + ownerName + ); + } + + public CollectorMinion(final UUID owner, final String ownerName, final Location location, final double energy, final int level, final Set linkedBlocks) { + this(owner, ownerName); + setLocation(location); + setEnergy(energy); + setLevel(level); + setLinkedBlocks(linkedBlocks); + findStand(); + } + + public int getRadius(final int level) { + return getSection().getInt("Levels." + level + ".Radius", 1); + } + + @Override + public void tick() { + if (getEnergy() < getEnergyPerUse(getLevel())) return; + final int radius = getRadius(getLevel()); + boolean useEnergy = false; + for (Entity e : getStand().getNearbyEntities(radius, radius, radius)) { + if (!(e instanceof Item)) continue; + if (e.hasMetadata("minionignore")) continue; + final Item item = (Item) e; + final List drops = new ArrayList<>(); + drops.add(item.getItemStack()); + item.remove(); + getLinkedBlocks().stream().filter(b -> b.getState() instanceof InventoryHolder).forEachOrdered(b -> { + InventoryHolder inv = (InventoryHolder) b.getState(); + final Collection remaining = inv.getInventory().addItem(drops.toArray(new ItemStack[] {})).values(); + drops.clear(); + drops.addAll(remaining); + }); + if (!drops.isEmpty()) { + drops.forEach(i -> { + Item it = getLocation().getWorld().dropItemNaturally(getLocation(), i); + it.setMetadata("minionignore", new FixedMetadataValue(MinionsPlus.getInstance(), true)); + }); + } + useEnergy = true; + } + if (useEnergy) consumeEnergy(getEnergyPerUse(getLevel())); + } + + @Override + public Replacer getReplacer() { + final DecimalFormat format = new DecimalFormat("#.#"); + return Replacer.create() + .add("%level%", String.valueOf(getLevel())) + .add("%energy%", format.format(getEnergy())) + .add("%owner%", getOwnerName()) + .add("%radius%", String.valueOf(getRadius(getLevel()))); + } + +} diff --git a/src/main/java/me/loganb1max/minionsplus/model/minions/FarmerMinion.java b/src/main/java/me/loganb1max/minionsplus/model/minions/FarmerMinion.java index 804d7a3..5161dc8 100644 --- a/src/main/java/me/loganb1max/minionsplus/model/minions/FarmerMinion.java +++ b/src/main/java/me/loganb1max/minionsplus/model/minions/FarmerMinion.java @@ -4,15 +4,12 @@ import me.loganb1max.minionsplus.MinionsPlus; import me.loganb1max.minionsplus.model.Minion; import me.loganb1max.minionsplus.util.ItemBuilder; import me.loganb1max.minionsplus.util.Replacer; -import org.bukkit.CropState; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; -import org.bukkit.material.Crops; - import java.text.DecimalFormat; import java.util.*; diff --git a/src/main/java/me/loganb1max/minionsplus/model/minions/FisherMinion.java b/src/main/java/me/loganb1max/minionsplus/model/minions/FisherMinion.java index 927d13a..aee8cf3 100644 --- a/src/main/java/me/loganb1max/minionsplus/model/minions/FisherMinion.java +++ b/src/main/java/me/loganb1max/minionsplus/model/minions/FisherMinion.java @@ -9,7 +9,6 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; - import java.text.DecimalFormat; import java.util.*; import java.util.concurrent.ThreadLocalRandom; diff --git a/src/main/java/me/loganb1max/minionsplus/model/minions/MinerMinion.java b/src/main/java/me/loganb1max/minionsplus/model/minions/MinerMinion.java index ad399cb..e3f9313 100644 --- a/src/main/java/me/loganb1max/minionsplus/model/minions/MinerMinion.java +++ b/src/main/java/me/loganb1max/minionsplus/model/minions/MinerMinion.java @@ -9,7 +9,6 @@ import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; - import java.text.DecimalFormat; import java.util.*; diff --git a/src/main/java/me/loganb1max/minionsplus/model/minions/SellerMinion.java b/src/main/java/me/loganb1max/minionsplus/model/minions/SellerMinion.java new file mode 100644 index 0000000..b05c0bd --- /dev/null +++ b/src/main/java/me/loganb1max/minionsplus/model/minions/SellerMinion.java @@ -0,0 +1,75 @@ +package me.loganb1max.minionsplus.model.minions; + +import me.loganb1max.minionsplus.MinionsPlus; +import me.loganb1max.minionsplus.model.Minion; +import me.loganb1max.minionsplus.util.Replacer; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.Chest; +import org.bukkit.inventory.ItemStack; +import java.text.DecimalFormat; +import java.util.Set; +import java.util.UUID; + +public class SellerMinion extends Minion { + + public SellerMinion(final UUID owner, final String ownerName) { + super( + MinionsPlus.getInstance().getConfig().getConfigurationSection("Seller"), + owner, + ownerName + ); + } + + public SellerMinion(final UUID owner, final String ownerName, final Location location, final double energy, final int level, final Set linkedBlocks) { + this(owner, ownerName); + setLocation(location); + setEnergy(energy); + setLevel(level); + setLinkedBlocks(linkedBlocks); + findStand(); + } + + public int getRadius(final int level) { + return getSection().getInt("Levels." + level + ".Radius", 1); + } + + @Override + public void tick() { + if (getEnergy() < getEnergyPerUse(getLevel())) return; + final int radius = getRadius(getLevel()); + boolean sold = false; + for (int y = getLocation().getBlockY() - radius; y < getLocation().getBlockY() + radius; y++) { + for (int x = getLocation().getBlockX() - radius; x < getLocation().getBlockX() + radius; x++) { + for (int z = getLocation().getBlockZ() - radius; z < getLocation().getBlockZ() + radius; z++) { + final Block b = getLocation().getWorld().getBlockAt(x, y, z); + if (b.getType() != Material.CHEST && b.getType() != Material.TRAPPED_CHEST) continue; + final Chest chest = (Chest) b.getState(); + for (int i = 0; i < chest.getInventory().getSize(); i++) { + final ItemStack item = chest.getInventory().getItem(i); + if (item == null || item.getType() == Material.AIR) continue; + double sellPrice = MinionsPlus.getEssentials().getWorth().getPrice(MinionsPlus.getEssentials(), item).doubleValue(); + if (sellPrice <= 0) continue; + MinionsPlus.getEcon().depositPlayer(Bukkit.getOfflinePlayer(getOwner()), sellPrice * item.getAmount()); + chest.getInventory().setItem(i, new ItemStack(Material.AIR)); + sold = true; + } + } + } + } + if (sold) consumeEnergy(getEnergyPerUse(getLevel())); + } + + @Override + public Replacer getReplacer() { + final DecimalFormat format = new DecimalFormat("#.#"); + return Replacer.create() + .add("%level%", String.valueOf(getLevel())) + .add("%energy%", format.format(getEnergy())) + .add("%owner%", getOwnerName()) + .add("%radius%", String.valueOf(getRadius(getLevel()))); + } + +} diff --git a/src/main/java/me/loganb1max/minionsplus/util/Replacer.java b/src/main/java/me/loganb1max/minionsplus/util/Replacer.java index b9de1a9..73ceb58 100644 --- a/src/main/java/me/loganb1max/minionsplus/util/Replacer.java +++ b/src/main/java/me/loganb1max/minionsplus/util/Replacer.java @@ -20,14 +20,14 @@ public class Replacer { public String replace(String string) { for (Map.Entry entry : this.replaceMap.entrySet()) { - string = string.replaceAll(entry.getKey(), entry.getValue()); + string = string.replace(entry.getKey(), entry.getValue()); } return string; } public List replace(List strings) { for (Map.Entry entry : this.replaceMap.entrySet()) { - strings = strings.stream().map(s -> s.replaceAll(entry.getKey(), entry.getValue())).collect(Collectors.toList()); + strings = strings.stream().map(s -> s.replace(entry.getKey(), entry.getValue())).collect(Collectors.toList()); } return strings; } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 34915ab..02f8b09 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -166,4 +166,196 @@ Fisher: Price: 1000.0 EnergyPerAction: 0.3 Radius: 5 - ChancePerBlockPerSecond: 50.0 \ No newline at end of file + ChancePerBlockPerSecond: 50.0 + +Seller: + Name: "Seller Minion" + Item: + Material: SKULL_ITEM + Durability: 3 + Skull: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2EwN2EyODg5ZjJiOGJiZmNjYWIyNjI2YTUxMmI0ZjA0OTAwOGQ2ZDFjY2ZhYmNmYzI0ZTQ4ZjNmNjIyNDM1MSJ9fX0= + DisplayName: "&6Seller Minion" + Lore: + - "" + - "&7Level: %level%" + - "&7Energy: %energy%" + - "&7Owner: %owner%" + Equipment: + Skull: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2EwN2EyODg5ZjJiOGJiZmNjYWIyNjI2YTUxMmI0ZjA0OTAwOGQ2ZDFjY2ZhYmNmYzI0ZTQ4ZjNmNjIyNDM1MSJ9fX0= + Chestplate: + Material: LEATHER_CHESTPLATE + Durability: 0 + Color: + Red: 255 + Green: 255 + Blue: 255 + Leggings: + Material: LEATHER_LEGGINGS + Durability: 0 + Color: + Red: 255 + Green: 255 + Blue: 255 + Boots: + Material: LEATHER_BOOTS + Durability: 0 + Color: + Red: 255 + Green: 255 + Blue: 255 + RightHand: + Material: BOOK + Durability: 0 + Levels: + '1': + Price: 0.0 + EnergyPerAction: 0.5 + Radius: 3 + '2': + Price: 1000.0 + EnergyPerAction: 0.3 + Radius: 5 + +Butcher: + Name: "Butcher Minion" + Item: + Material: SKULL_ITEM + Durability: 3 + Skull: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWNkN2E5ODMxYTcwOTBmOWQ2ZGRhMzVhYmQ2YmZmYmJiZDM0YTZkM2Q5N2VmMTFkOGE2YjFhOTQ2Y2MyNmY1ZiJ9fX0==== + DisplayName: "&6Butcher Minion" + Lore: + - "" + - "&7Level: %level%" + - "&7Energy: %energy%" + - "&7Owner: %owner%" + Equipment: + Skull: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWNkN2E5ODMxYTcwOTBmOWQ2ZGRhMzVhYmQ2YmZmYmJiZDM0YTZkM2Q5N2VmMTFkOGE2YjFhOTQ2Y2MyNmY1ZiJ9fX0==== + Chestplate: + Material: LEATHER_CHESTPLATE + Durability: 0 + Color: + Red: 255 + Green: 0 + Blue: 0 + Leggings: + Material: LEATHER_LEGGINGS + Durability: 0 + Color: + Red: 255 + Green: 0 + Blue: 0 + Boots: + Material: LEATHER_BOOTS + Durability: 0 + Color: + Red: 255 + Green: 0 + Blue: 0 + RightHand: + Material: DIAMOND_SWORD + Durability: 0 + Levels: + '1': + Price: 0.0 + EnergyPerAction: 0.5 + Radius: 3 + '2': + Price: 1000.0 + EnergyPerAction: 0.3 + Radius: 5 + +Collector: + Name: "Collector Minion" + Item: + Material: SKULL_ITEM + Durability: 3 + Skull: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjhkYTE0NjI1NzU0Nzc5NWMzYTk1NGRiNzgxZTBkMGM0ZDBhZjAyN2YwZDE1MWQzOWE0OWUxYmJkMjFjZmM4OCJ9fX0=== + DisplayName: "&6Collector Minion" + Lore: + - "" + - "&7Level: %level%" + - "&7Energy: %energy%" + - "&7Owner: %owner%" + Equipment: + Skull: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjhkYTE0NjI1NzU0Nzc5NWMzYTk1NGRiNzgxZTBkMGM0ZDBhZjAyN2YwZDE1MWQzOWE0OWUxYmJkMjFjZmM4OCJ9fX0=== + Chestplate: + Material: LEATHER_CHESTPLATE + Durability: 0 + Color: + Red: 0 + Green: 255 + Blue: 0 + Leggings: + Material: LEATHER_LEGGINGS + Durability: 0 + Color: + Red: 0 + Green: 255 + Blue: 0 + Boots: + Material: LEATHER_BOOTS + Durability: 0 + Color: + Red: 0 + Green: 255 + Blue: 0 + RightHand: + Material: DIAMOND_SWORD + Durability: 0 + Levels: + '1': + Price: 0.0 + EnergyPerAction: 0.5 + Radius: 3 + '2': + Price: 1000.0 + EnergyPerAction: 0.3 + Radius: 5 + +Breeder: + Name: "Breeder Minion" + Item: + Material: SKULL_ITEM + Durability: 3 + Skull: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmNiYzEzNmY1YWRjZmJiYTdlMjVmMzE4MjE3Y2VkMzFhNTI0YzVjMjE4NWJmNWE2ZjNlYmE3YmViNWQ4YTcwNiJ9fX0==== + DisplayName: "&6Breeder Minion" + Lore: + - "" + - "&7Level: %level%" + - "&7Energy: %energy%" + - "&7Owner: %owner%" + Equipment: + Skull: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmNiYzEzNmY1YWRjZmJiYTdlMjVmMzE4MjE3Y2VkMzFhNTI0YzVjMjE4NWJmNWE2ZjNlYmE3YmViNWQ4YTcwNiJ9fX0==== + Chestplate: + Material: LEATHER_CHESTPLATE + Durability: 0 + Color: + Red: 0 + Green: 255 + Blue: 255 + Leggings: + Material: LEATHER_LEGGINGS + Durability: 0 + Color: + Red: 0 + Green: 255 + Blue: 255 + Boots: + Material: LEATHER_BOOTS + Durability: 0 + Color: + Red: 0 + Green: 255 + Blue: 255 + RightHand: + Material: WHEAT + Durability: 0 + Levels: + '1': + Price: 0.0 + EnergyPerAction: 0.5 + Radius: 3 + '2': + Price: 1000.0 + EnergyPerAction: 0.3 + Radius: 5 \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 11d5108..87a39ce 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,7 +4,7 @@ version: 1.0-SNAPSHOT description: Minions Plugin for Skyblock Servers author: loganb1max load: POSTWORLD -depend: [Vault] +depend: [Vault, Essentials] commands: minions: aliases: [minion]