diff --git a/NMS/API/src/main/java/com/willfp/illusioner/nms/api/EntityIllusionerWrapper.java b/NMS/API/src/main/java/com/willfp/illusioner/nms/api/EntityIllusionerWrapper.java index 2bd1a7d..03caf1b 100644 --- a/NMS/API/src/main/java/com/willfp/illusioner/nms/api/EntityIllusionerWrapper.java +++ b/NMS/API/src/main/java/com/willfp/illusioner/nms/api/EntityIllusionerWrapper.java @@ -2,11 +2,12 @@ package com.willfp.illusioner.nms.api; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; import org.bukkit.plugin.Plugin; /** * NMS Interface for managing illusioner bosses */ public interface EntityIllusionerWrapper { - void createBossbar(Plugin plugin, BarColor color, BarStyle style); + BossBar createBossbar(Plugin plugin, BarColor color, BarStyle style); } \ No newline at end of file diff --git a/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/EntityIllusioner.java b/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/EntityIllusioner.java index 2f4a6c8..e05b886 100644 --- a/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/EntityIllusioner.java +++ b/NMS/v1_15_R1/src/main/java/com/willfp/illusioner/v1_15_R1/EntityIllusioner.java @@ -6,7 +6,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.attribute.Attribute; import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarFlag; import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; import org.bukkit.craftbukkit.v1_15_R1.CraftWorld; @@ -45,8 +44,8 @@ public class EntityIllusioner extends EntityIllagerIllusioner implements EntityI } @Override - public void createBossbar(Plugin plugin, BarColor color, BarStyle style) { - BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style, (BarFlag) null); + public BossBar createBossbar(Plugin plugin, BarColor color, BarStyle style) { + BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style); Bukkit.getServer().getOnlinePlayers().forEach(bossBar::addPlayer); LivingEntity entity = (LivingEntity) this.getBukkitEntity(); @@ -62,5 +61,7 @@ public class EntityIllusioner extends EntityIllagerIllusioner implements EntityI } } }.runTaskTimer(plugin, 0, 1); + + return bossBar; } } diff --git a/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/EntityIllusioner.java b/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/EntityIllusioner.java index eaa78f3..2a666f6 100644 --- a/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/EntityIllusioner.java +++ b/NMS/v1_16_R1/src/main/java/com/willfp/illusioner/v1_16_R1/EntityIllusioner.java @@ -6,7 +6,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.attribute.Attribute; import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarFlag; import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; import org.bukkit.craftbukkit.v1_16_R1.CraftWorld; @@ -45,8 +44,8 @@ public class EntityIllusioner extends EntityIllagerIllusioner implements EntityI } @Override - public void createBossbar(Plugin plugin, BarColor color, BarStyle style) { - BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style, (BarFlag) null); + public BossBar createBossbar(Plugin plugin, BarColor color, BarStyle style) { + BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style); Bukkit.getServer().getOnlinePlayers().forEach(bossBar::addPlayer); LivingEntity entity = (LivingEntity) this.getBukkitEntity(); @@ -62,5 +61,7 @@ public class EntityIllusioner extends EntityIllagerIllusioner implements EntityI } } }.runTaskTimer(plugin, 0, 1); + + return bossBar; } } diff --git a/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/EntityIllusioner.java b/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/EntityIllusioner.java index 38b8cff..1401191 100644 --- a/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/EntityIllusioner.java +++ b/NMS/v1_16_R2/src/main/java/com/willfp/illusioner/v1_16_R2/EntityIllusioner.java @@ -6,7 +6,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.attribute.Attribute; import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarFlag; import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; import org.bukkit.craftbukkit.v1_16_R2.CraftWorld; @@ -45,8 +44,8 @@ public class EntityIllusioner extends EntityIllagerIllusioner implements EntityI } @Override - public void createBossbar(Plugin plugin, BarColor color, BarStyle style) { - BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style, (BarFlag) null); + public BossBar createBossbar(Plugin plugin, BarColor color, BarStyle style) { + BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style); Bukkit.getServer().getOnlinePlayers().forEach(bossBar::addPlayer); LivingEntity entity = (LivingEntity) this.getBukkitEntity(); @@ -62,5 +61,7 @@ public class EntityIllusioner extends EntityIllagerIllusioner implements EntityI } } }.runTaskTimer(plugin, 0, 1); + + return bossBar; } } diff --git a/NMS/v1_16_R3/src/main/java/com/willfp/illusioner/v1_16_R3/EntityIllusioner.java b/NMS/v1_16_R3/src/main/java/com/willfp/illusioner/v1_16_R3/EntityIllusioner.java index 8ae43d4..5f7a723 100644 --- a/NMS/v1_16_R3/src/main/java/com/willfp/illusioner/v1_16_R3/EntityIllusioner.java +++ b/NMS/v1_16_R3/src/main/java/com/willfp/illusioner/v1_16_R3/EntityIllusioner.java @@ -6,7 +6,6 @@ import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.attribute.Attribute; import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarFlag; import org.bukkit.boss.BarStyle; import org.bukkit.boss.BossBar; import org.bukkit.craftbukkit.v1_16_R3.CraftWorld; @@ -45,8 +44,8 @@ public class EntityIllusioner extends EntityIllagerIllusioner implements EntityI } @Override - public void createBossbar(Plugin plugin, BarColor color, BarStyle style) { - BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style, (BarFlag) null); + public BossBar createBossbar(Plugin plugin, BarColor color, BarStyle style) { + BossBar bossBar = Bukkit.getServer().createBossBar(this.displayName, color, style); Bukkit.getServer().getOnlinePlayers().forEach(bossBar::addPlayer); LivingEntity entity = (LivingEntity) this.getBukkitEntity(); @@ -62,5 +61,7 @@ public class EntityIllusioner extends EntityIllagerIllusioner implements EntityI } } }.runTaskTimer(plugin, 0, 1); + + return bossBar; } } diff --git a/Plugin/build.gradle b/Plugin/build.gradle index 0870522..b9df11d 100644 --- a/Plugin/build.gradle +++ b/Plugin/build.gradle @@ -13,6 +13,7 @@ dependencies { implementation 'org.bstats:bstats-bukkit:1.7' compileOnly 'org.spigotmc:spigot-api:1.16.3-R0.1-SNAPSHOT' compileOnly 'commons-io:commons-io:2.8.0' + compileOnly 'com.willfp:EcoEnchants:5.10.5' } shadowJar { diff --git a/Plugin/src/main/java/com/willfp/illusioner/illusioner/listeners/DeathListeners.java b/Plugin/src/main/java/com/willfp/illusioner/illusioner/listeners/DeathListeners.java index bc0b3e1..62b4565 100644 --- a/Plugin/src/main/java/com/willfp/illusioner/illusioner/listeners/DeathListeners.java +++ b/Plugin/src/main/java/com/willfp/illusioner/illusioner/listeners/DeathListeners.java @@ -2,6 +2,7 @@ package com.willfp.illusioner.illusioner.listeners; import com.willfp.illusioner.events.entitydeathbyentity.EntityDeathByEntityEvent; import com.willfp.illusioner.illusioner.IllusionerManager; +import com.willfp.illusioner.integrations.ecoenchants.EcoEnchantsManager; import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -24,6 +25,12 @@ public class DeathListeners implements Listener { }); IllusionerManager.OPTIONS.getDrops().forEach(drop -> { + if(event.getKiller() instanceof Player) { + if (EcoEnchantsManager.isRegistered()) { + EcoEnchantsManager.dropQueueItems((Player) event.getKiller(), event.getVictim().getLocation(), drop); + return; + } + } event.getVictim().getLocation().getWorld().dropItemNaturally(event.getVictim().getLocation(), drop); }); diff --git a/Plugin/src/main/java/com/willfp/illusioner/integrations/Integration.java b/Plugin/src/main/java/com/willfp/illusioner/integrations/Integration.java new file mode 100644 index 0000000..b1d33f7 --- /dev/null +++ b/Plugin/src/main/java/com/willfp/illusioner/integrations/Integration.java @@ -0,0 +1,5 @@ +package com.willfp.illusioner.integrations; + +public interface Integration { + String getPluginName(); +} diff --git a/Plugin/src/main/java/com/willfp/illusioner/integrations/ecoenchants/EcoEnchantsIntegration.java b/Plugin/src/main/java/com/willfp/illusioner/integrations/ecoenchants/EcoEnchantsIntegration.java new file mode 100644 index 0000000..340deb5 --- /dev/null +++ b/Plugin/src/main/java/com/willfp/illusioner/integrations/ecoenchants/EcoEnchantsIntegration.java @@ -0,0 +1,11 @@ +package com.willfp.illusioner.integrations.ecoenchants; + +import com.willfp.illusioner.integrations.Integration; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public interface EcoEnchantsIntegration extends Integration { + void dropItems(Player player, Location location, ItemStack itemStack); + void dropExp(Player player, Location location, double amount); +} diff --git a/Plugin/src/main/java/com/willfp/illusioner/integrations/ecoenchants/EcoEnchantsManager.java b/Plugin/src/main/java/com/willfp/illusioner/integrations/ecoenchants/EcoEnchantsManager.java new file mode 100644 index 0000000..8d19359 --- /dev/null +++ b/Plugin/src/main/java/com/willfp/illusioner/integrations/ecoenchants/EcoEnchantsManager.java @@ -0,0 +1,29 @@ +package com.willfp.illusioner.integrations.ecoenchants; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +public class EcoEnchantsManager { + private static final Set integrations = new HashSet<>(); + + public static void register(EcoEnchantsIntegration integration) { + integrations.add(integration); + } + + public static void dropQueueItems(Player player, Location location, ItemStack... items) { + Arrays.stream(items).forEach(item -> integrations.forEach(integration -> integration.dropItems(player, location, item))); + } + + public static void dropQueueExp(Player player, Location location, double amount) { + integrations.forEach(integration -> integration.dropExp(player, location, amount)); + } + + public static boolean isRegistered() { + return !integrations.isEmpty(); + } +} diff --git a/Plugin/src/main/java/com/willfp/illusioner/integrations/ecoenchants/plugins/EcoEnchantsIntegrationImpl.java b/Plugin/src/main/java/com/willfp/illusioner/integrations/ecoenchants/plugins/EcoEnchantsIntegrationImpl.java new file mode 100644 index 0000000..f52478e --- /dev/null +++ b/Plugin/src/main/java/com/willfp/illusioner/integrations/ecoenchants/plugins/EcoEnchantsIntegrationImpl.java @@ -0,0 +1,30 @@ +package com.willfp.illusioner.integrations.ecoenchants.plugins; + +import com.willfp.ecoenchants.util.internal.DropQueue; +import com.willfp.illusioner.integrations.ecoenchants.EcoEnchantsIntegration; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class EcoEnchantsIntegrationImpl implements EcoEnchantsIntegration { + @Override + public void dropItems(Player player, Location location, ItemStack itemStack) { + new DropQueue(player) + .setLocation(location) + .addItem(itemStack) + .push(); + } + + @Override + public void dropExp(Player player, Location location, double amount) { + new DropQueue(player) + .setLocation(location) + .addXP((int) Math.ceil(amount)) + .push(); + } + + @Override + public String getPluginName() { + return "EcoEnchants"; + } +} diff --git a/Plugin/src/main/java/com/willfp/illusioner/util/internal/Loader.java b/Plugin/src/main/java/com/willfp/illusioner/util/internal/Loader.java index 114bed2..1ddfd1e 100644 --- a/Plugin/src/main/java/com/willfp/illusioner/util/internal/Loader.java +++ b/Plugin/src/main/java/com/willfp/illusioner/util/internal/Loader.java @@ -1,5 +1,7 @@ package com.willfp.illusioner.util.internal; +import com.willfp.ecoenchants.util.interfaces.Callable; +import com.willfp.ecoenchants.util.optional.Prerequisite; import com.willfp.illusioner.IllusionerPlugin; import com.willfp.illusioner.command.commands.CommandIldebug; import com.willfp.illusioner.command.commands.CommandIlreload; @@ -12,6 +14,8 @@ import com.willfp.illusioner.illusioner.IllusionerManager; import com.willfp.illusioner.illusioner.listeners.AttackListeners; import com.willfp.illusioner.illusioner.listeners.DeathListeners; import com.willfp.illusioner.illusioner.listeners.SpawnListeners; +import com.willfp.illusioner.integrations.ecoenchants.EcoEnchantsManager; +import com.willfp.illusioner.integrations.ecoenchants.plugins.EcoEnchantsIntegrationImpl; import com.willfp.illusioner.nms.BlockBreak; import com.willfp.illusioner.nms.Cooldown; import com.willfp.illusioner.nms.NMSIllusioner; @@ -22,6 +26,12 @@ import com.willfp.illusioner.util.internal.updater.UpdateChecker; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Set; +import java.util.stream.Collectors; /** * Class containing methods for the loading and unloading of Illusioner @@ -95,6 +105,32 @@ public class Loader { Logger.info(""); + /* + Register Integrations + */ + Logger.info("Loading Integrations..."); + + final HashMap integrations = new HashMap() {{ + put("EcoEnchants", () -> EcoEnchantsManager.register(new EcoEnchantsIntegrationImpl())); + }}; + + Set enabledPlugins = Arrays.stream(Bukkit.getPluginManager().getPlugins()).map(Plugin::getName).collect(Collectors.toSet()); + + integrations.forEach(((s, callable) -> { + StringBuilder log = new StringBuilder(); + log.append(s).append(": "); + if (enabledPlugins.contains(s)) { + callable.call(); + log.append("&aENABLED"); + } else { + log.append("&9DISABLED"); + } + Logger.info(log.toString()); + })); + + Prerequisite.update(); + Logger.info(""); + /* Register Events */