From a2c8b73dbc43bb7663e0ef4a745ab044b659e320 Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Sun, 19 Sep 2021 22:49:49 +0300 Subject: [PATCH 1/3] Added MythicMobs mobs support. Usage: 'base-mob: mythicmobs__' --- build.gradle | 11 ++++- eco-core/core-plugin/build.gradle | 1 + .../com/willfp/ecobosses/EcoBossesPlugin.java | 12 ++--- .../ecobosses/bosses/LivingEcoBoss.java | 2 + .../bosses/util/bosstype/BossEntityUtils.java | 35 ++++++++++++-- .../util/bosstype/MythicMobsBossType.java | 46 +++++++++++++++++++ 6 files changed, 96 insertions(+), 11 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/MythicMobsBossType.java diff --git a/build.gradle b/build.gradle index f589465..c3dc3f5 100644 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,7 @@ allprojects { maven { url 'https://maven.sk89q.com/repo/' } maven { url 'https://github.com/factions-site/repo/raw/public/' } maven { url 'https://repo.extendedclip.com/content/repositories/placeholderapi/' } + maven { url 'https://mvn.lumine.io/repository/maven-public/' } } jar { @@ -85,7 +86,15 @@ shadowJar { } jar { - archiveFileName = findProperty("plugin-name") + " v" + findProperty("version") + " " + "unshaded" + ".jar" + archiveFileName = findProperty("plugin-name") + " v" + findProperty("version") + ".jar" +} + +publishing { + publications { + maven(MavenPublication) { + from(components.java) + } + } } group = 'com.willfp' diff --git a/eco-core/core-plugin/build.gradle b/eco-core/core-plugin/build.gradle index 9cb6f92..c463a83 100644 --- a/eco-core/core-plugin/build.gradle +++ b/eco-core/core-plugin/build.gradle @@ -6,4 +6,5 @@ dependencies { compileOnly 'commons-io:commons-io:2.8.0' compileOnly 'com.destroystokyo.paper:paper-api:1.16.3-R0.1-SNAPSHOT' compileOnly 'com.github.lokka30:LevelledMobs:3.1.4' + compileOnly 'io.lumine.xikage:MythicMobs:4.9.1' } \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/EcoBossesPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/EcoBossesPlugin.java index 508019c..ff15fe1 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/EcoBossesPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/EcoBossesPlugin.java @@ -3,12 +3,9 @@ package com.willfp.ecobosses; import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.command.impl.PluginCommand; import com.willfp.eco.core.integrations.IntegrationLoader; -import com.willfp.ecobosses.bosses.listeners.AttackListeners; -import com.willfp.ecobosses.bosses.listeners.AutoSpawnTimer; -import com.willfp.ecobosses.bosses.listeners.DeathListeners; -import com.willfp.ecobosses.bosses.listeners.PassiveListeners; -import com.willfp.ecobosses.bosses.listeners.SpawnListeners; +import com.willfp.ecobosses.bosses.listeners.*; import com.willfp.ecobosses.bosses.util.BossUtils; +import com.willfp.ecobosses.bosses.util.bosstype.BossEntityUtils; import com.willfp.ecobosses.commands.CommandEcobosses; import com.willfp.ecobosses.integrations.levelledmobs.LevelledMobsListener; import com.willfp.ecobosses.util.DiscoverRecipeListener; @@ -46,7 +43,7 @@ public class EcoBossesPlugin extends EcoPlugin { @Override protected List loadPluginCommands() { - return Arrays.asList( + return List.of( new CommandEcobosses(this) ); } @@ -54,7 +51,8 @@ public class EcoBossesPlugin extends EcoPlugin { @Override protected List loadIntegrationLoaders() { return Arrays.asList( - new IntegrationLoader("LevelledMobs", () -> this.getEventManager().registerListener(new LevelledMobsListener())) + new IntegrationLoader("LevelledMobs", () -> this.getEventManager().registerListener(new LevelledMobsListener())), + new IntegrationLoader("MythicMobs", () -> BossEntityUtils.mythicMobs = true) ); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java index 4a9e41c..307667d 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java @@ -13,11 +13,13 @@ import com.willfp.ecobosses.bosses.tick.tickers.NamePlaceholderTicker; import com.willfp.ecobosses.bosses.tick.tickers.TargetTicker; import com.willfp.ecobosses.bosses.util.obj.EquipmentPiece; import com.willfp.ecobosses.bosses.util.obj.OptionedSound; +import io.lumine.xikage.mythicmobs.mobs.MythicMob; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.attribute.Attribute; import org.bukkit.attribute.AttributeInstance; import org.bukkit.attribute.AttributeModifier; +import org.bukkit.block.Block; import org.bukkit.boss.BarFlag; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/BossEntityUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/BossEntityUtils.java index 2f1a15e..4458205 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/BossEntityUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/BossEntityUtils.java @@ -1,26 +1,55 @@ package com.willfp.ecobosses.bosses.util.bosstype; +import io.lumine.xikage.mythicmobs.MythicMobs; +import io.lumine.xikage.mythicmobs.mobs.MythicMob; +import lombok.Getter; +import lombok.Setter; import lombok.experimental.UtilityClass; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; + @UtilityClass @SuppressWarnings("unchecked") public class BossEntityUtils { + + @Getter + @Setter + public static boolean mythicMobs = false; + /** * Get boss type. * * @param id The name. * @return The boss type. */ - public static BossType getBossType(@NotNull final String id) { + public static BossType getBossType(@NotNull String id) { + + if (mythicMobs && id.startsWith("mythicmobs_")) { + int level; + + try { + level = Integer.parseInt(Arrays.stream(id.split("_")).toList().get(id.split("_").length-1)); + } catch (NumberFormatException exception) { + level = 1; + } + + MythicMob mob = MythicMobs.inst().getMobManager().getMythicMob(id.replace("mythicmobs_", "").replace("_"+level, "")); + + if (mob != null) { + return new MythicMobsBossType(mob, level); + } + + else id = "zombie"; + } + try { Class type = (Class) EntityType.valueOf(id.toUpperCase()).getEntityClass(); assert type != null; return new VanillaBossType(type); - } catch (IllegalArgumentException ignored) { - } + } catch (IllegalArgumentException ignored) {} return null; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/MythicMobsBossType.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/MythicMobsBossType.java new file mode 100644 index 0000000..1ef6a02 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/MythicMobsBossType.java @@ -0,0 +1,46 @@ +package com.willfp.ecobosses.bosses.util.bosstype; + +import io.lumine.xikage.mythicmobs.MythicMobs; +import io.lumine.xikage.mythicmobs.adapters.AbstractLocation; +import io.lumine.xikage.mythicmobs.adapters.AbstractWorld; +import io.lumine.xikage.mythicmobs.api.exceptions.InvalidMobTypeException; +import io.lumine.xikage.mythicmobs.mobs.MythicMob; +import org.bukkit.Location; +import org.bukkit.entity.LivingEntity; +import org.jetbrains.annotations.NotNull; + +public class MythicMobsBossType extends BossType { + + /** + * The entity type. + */ + private final MythicMob boss; + + /** + * Level of MythicMobs mob + */ + private final int level; + + /** + * Create new vanilla boss type. + * + * @param boss The MythicMob. + */ + public MythicMobsBossType(MythicMob boss, int level) { + this.boss = boss; + this.level = level; + } + + + @Override + public LivingEntity spawnBossEntity(@NotNull Location location) { + try { + return (LivingEntity) MythicMobs.inst().getAPIHelper().spawnMythicMob(boss, location, level); + } catch (InvalidMobTypeException e) { + e.printStackTrace(); + } + return null; + } + + +} From 203bec560eff623b9ae2e9de40447e427d08f658 Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Sun, 19 Sep 2021 23:01:40 +0300 Subject: [PATCH 2/3] Updated how mythic mob fetcher works --- .../bosses/util/bosstype/BossEntityUtils.java | 26 ++++++++++--------- .../core-plugin/src/main/resources/plugin.yml | 3 +++ 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/BossEntityUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/BossEntityUtils.java index 4458205..5a2b062 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/BossEntityUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/bosstype/BossEntityUtils.java @@ -27,22 +27,24 @@ public class BossEntityUtils { */ public static BossType getBossType(@NotNull String id) { - if (mythicMobs && id.startsWith("mythicmobs_")) { - int level; + if (id.startsWith("mythicmobs_")) { + if (mythicMobs) { + int level; - try { - level = Integer.parseInt(Arrays.stream(id.split("_")).toList().get(id.split("_").length-1)); - } catch (NumberFormatException exception) { - level = 1; - } + try { + level = Integer.parseInt(Arrays.stream(id.split("_")).toList().get(id.split("_").length-1)); + } catch (NumberFormatException exception) { + level = 1; + } - MythicMob mob = MythicMobs.inst().getMobManager().getMythicMob(id.replace("mythicmobs_", "").replace("_"+level, "")); + MythicMob mob = MythicMobs.inst().getMobManager().getMythicMob(id.replace("mythicmobs_", "").replace("_"+level, "")); - if (mob != null) { - return new MythicMobsBossType(mob, level); - } + if (mob != null) { + return new MythicMobsBossType(mob, level); + } + else id = "zombie"; + } else id = "zombie"; - else id = "zombie"; } try { diff --git a/eco-core/core-plugin/src/main/resources/plugin.yml b/eco-core/core-plugin/src/main/resources/plugin.yml index 5f4310d..5e53d69 100644 --- a/eco-core/core-plugin/src/main/resources/plugin.yml +++ b/eco-core/core-plugin/src/main/resources/plugin.yml @@ -5,6 +5,9 @@ api-version: 1.16 authors: [Auxilor] website: willfp.com load: STARTUP +softdepend: + - MythicMobs + - LevelledMobs depend: - eco From 468b0b4292b4be61b497a6ca17f6c5b4046d89e3 Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Mon, 20 Sep 2021 11:16:44 +0300 Subject: [PATCH 3/3] Added 'baby: true/false' option for boss config to control the mob age. --- .../src/main/java/com/willfp/ecobosses/bosses/EcoBoss.java | 6 ++++++ .../java/com/willfp/ecobosses/bosses/LivingEcoBoss.java | 6 ++++++ .../core-plugin/src/main/resources/bosses/alpha_wolf.yml | 1 + .../core-plugin/src/main/resources/bosses/dark_guardian.yml | 1 + .../core-plugin/src/main/resources/bosses/steel_golem.yml | 1 + .../core-plugin/src/main/resources/bosses/tarantula.yml | 1 + 6 files changed, 16 insertions(+) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/EcoBoss.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/EcoBoss.java index b6be417..0d9d840 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/EcoBoss.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/EcoBoss.java @@ -124,6 +124,11 @@ public class EcoBoss extends PluginDependent { @Getter private final int attackDamage; + /** + * Age state. + */ + @Getter + private final boolean baby; /** * The follow range. @@ -325,6 +330,7 @@ public class EcoBoss extends PluginDependent { this.name = name; this.livingBosses = new HashMap<>(); this.isGlowing = this.getConfig().getBool("glowing"); + this.baby = this.getConfig().getBool("baby"); this.displayName = this.getConfig().getString("name"); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java index 307667d..8e8b33d 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java @@ -21,6 +21,7 @@ import org.bukkit.attribute.AttributeInstance; import org.bukkit.attribute.AttributeModifier; import org.bukkit.block.Block; import org.bukkit.boss.BarFlag; +import org.bukkit.entity.Ageable; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.inventory.EntityEquipment; @@ -107,6 +108,11 @@ public class LivingEcoBoss extends PluginDependent { if (boss.isGlowing()) entity.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, Integer.MAX_VALUE, 1, false, false, false)); + if (entity instanceof Ageable ageable) { + if (boss.isBaby()) ageable.setBaby(); + else ageable.setAdult(); + } + if (boss.getTimeToLive() > 0) { entity.setMetadata("death-time", this.getPlugin().getMetadataValueFactory().create(System.currentTimeMillis() + (boss.getTimeToLive() * 1000L))); } diff --git a/eco-core/core-plugin/src/main/resources/bosses/alpha_wolf.yml b/eco-core/core-plugin/src/main/resources/bosses/alpha_wolf.yml index ee39081..09f7408 100644 --- a/eco-core/core-plugin/src/main/resources/bosses/alpha_wolf.yml +++ b/eco-core/core-plugin/src/main/resources/bosses/alpha_wolf.yml @@ -2,6 +2,7 @@ enabled: true name: "&fAlpha Wolf &7| &c%health%♥ &7| &e%time%" # Display name base-mob: wolf +baby: false # If set to true: will make the boss mob baby (if possible) bossbar: enabled: true diff --git a/eco-core/core-plugin/src/main/resources/bosses/dark_guardian.yml b/eco-core/core-plugin/src/main/resources/bosses/dark_guardian.yml index 9db16f3..f134f64 100644 --- a/eco-core/core-plugin/src/main/resources/bosses/dark_guardian.yml +++ b/eco-core/core-plugin/src/main/resources/bosses/dark_guardian.yml @@ -2,6 +2,7 @@ enabled: true name: "&9Dark Guardian &7| &c%health%♥ &7| &e%time%" # Display name base-mob: ravager +baby: false # If set to true: will make the boss mob baby (if possible) bossbar: enabled: true diff --git a/eco-core/core-plugin/src/main/resources/bosses/steel_golem.yml b/eco-core/core-plugin/src/main/resources/bosses/steel_golem.yml index 99bd570..631c162 100644 --- a/eco-core/core-plugin/src/main/resources/bosses/steel_golem.yml +++ b/eco-core/core-plugin/src/main/resources/bosses/steel_golem.yml @@ -2,6 +2,7 @@ enabled: true name: "&8Steel Golem &7| &c%health%♥ &7| &e%time%" # Display name base-mob: iron_golem +baby: false # If set to true: will make the boss mob baby (if possible) bossbar: enabled: true diff --git a/eco-core/core-plugin/src/main/resources/bosses/tarantula.yml b/eco-core/core-plugin/src/main/resources/bosses/tarantula.yml index e711c38..91f1ff9 100644 --- a/eco-core/core-plugin/src/main/resources/bosses/tarantula.yml +++ b/eco-core/core-plugin/src/main/resources/bosses/tarantula.yml @@ -2,6 +2,7 @@ enabled: true name: "&4Tarantula &7| &c%health%♥ &7| &e%time%" # Display name base-mob: cave_spider +baby: false # If set to true: will make the boss mob baby (if possible) bossbar: enabled: true