From 6fa6ebe3f09e12b1ce0a9bbbdc127d4c258fbbcb Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Sat, 14 Jun 2025 11:53:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(compatibility):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E6=8F=92=E4=BB=B6=E7=9A=84=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E6=80=A7=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 兼容 AureliumSkills、McMMO、MMOCore、Jobs、EcoSkills 和 EcoJobs 的等级支持 - 兼容 FreeMinecraftModels 模型放置模型 - 兼容从 CustomFishing 获取物品 --- bukkit/compatibility/build.gradle.kts | 21 ++++++++++ .../BukkitCompatibilityManager.java | 40 +++++++++++++++--- .../item/CustomFishingProvider.java | 23 ++++++++++ .../AureliumSkillsLevelerProvider.java | 27 ++++++++++++ .../leveler/EcoJobsLevelerProvider.java | 28 +++++++++++++ .../leveler/EcoSkillsLevelerProvider.java | 21 ++++++++++ .../leveler/JobsRebornLevelerProvider.java | 30 +++++++++++++ .../leveler/MMOCoreLevelerProvider.java | 20 +++++++++ .../leveler/McMMOLevelerProvider.java | 19 +++++++++ .../bettermodel/BetterModelModel.java | 2 +- .../bettermodel/BetterModelUtils.java | 2 +- .../FreeMinecraftModelsModel.java | 23 ++++++++++ .../FreeMinecraftModelsUtils.java | 42 +++++++++++++++++++ .../modelengine/ModelEngineModel.java | 2 +- .../modelengine/ModelEngineUtils.java | 2 +- bukkit/paper-loader/build.gradle.kts | 8 ++++ .../furniture/AbstractFurnitureManager.java | 2 + 17 files changed, 303 insertions(+), 9 deletions(-) create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/item/CustomFishingProvider.java create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/AureliumSkillsLevelerProvider.java create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/EcoJobsLevelerProvider.java create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/EcoSkillsLevelerProvider.java create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/JobsRebornLevelerProvider.java create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/MMOCoreLevelerProvider.java create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/McMMOLevelerProvider.java rename bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/{ => model}/bettermodel/BetterModelModel.java (88%) rename bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/{ => model}/bettermodel/BetterModelUtils.java (86%) create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/freeminecraftmodels/FreeMinecraftModelsModel.java create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/freeminecraftmodels/FreeMinecraftModelsUtils.java rename bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/{ => model}/modelengine/ModelEngineModel.java (88%) rename bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/{ => model}/modelengine/ModelEngineUtils.java (92%) diff --git a/bukkit/compatibility/build.gradle.kts b/bukkit/compatibility/build.gradle.kts index e995978d5..d72ffc770 100644 --- a/bukkit/compatibility/build.gradle.kts +++ b/bukkit/compatibility/build.gradle.kts @@ -11,6 +11,10 @@ repositories { maven("https://nexus.phoenixdevt.fr/repository/maven-public/") // mmoitems maven("https://repo.viaversion.com") // via maven("https://repo.skriptlang.org/releases/") // skript + maven("https://nexus.neetgames.com/repository/maven-releases/") // mcmmo + maven("https://repo.dmulloy2.net/repository/public/") // mcmmo required + maven("https://repo.auxilor.io/repository/maven-public/") // eco + maven("https://repo.magmaguy.com/releases") } dependencies { @@ -49,6 +53,23 @@ dependencies { compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false } // MythicMobs compileOnly("io.lumine:Mythic-Dist:5.9.0") + // McMMO + compileOnly("com.gmail.nossr50.mcMMO:mcMMO:2.2.038") + // MMOCore + compileOnly("net.Indyuce:MMOCore-API:1.12.1-SNAPSHOT") + // JobsReborn + compileOnly("com.github.Zrips:Jobs:v5.2.2.3") + // CustomFishing + compileOnly("net.momirealms:custom-fishing:2.3.3") + // eco + compileOnly("com.willfp:eco:6.70.1") + compileOnly("com.willfp:EcoJobs:3.56.1") + compileOnly("com.willfp:EcoSkills:3.46.1") + compileOnly("com.willfp:libreforge:4.58.1") + // AureliumSkills + compileOnly("com.github.Archy-X:AureliumSkills:Beta1.3.21") + // FreeMinecraftModels + compileOnly("com.magmaguy:FreeMinecraftModels:2.1.0") } java { diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java index 6b2b6b923..97c78879f 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java @@ -1,14 +1,16 @@ package net.momirealms.craftengine.bukkit.compatibility; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; -import net.momirealms.craftengine.bukkit.compatibility.bettermodel.BetterModelModel; +import net.momirealms.craftengine.bukkit.compatibility.model.bettermodel.BetterModelModel; +import net.momirealms.craftengine.bukkit.compatibility.item.CustomFishingProvider; import net.momirealms.craftengine.bukkit.compatibility.item.MMOItemsProvider; import net.momirealms.craftengine.bukkit.compatibility.item.MythicMobsProvider; import net.momirealms.craftengine.bukkit.compatibility.item.NeigeItemsProvider; import net.momirealms.craftengine.bukkit.compatibility.legacy.slimeworld.LegacySlimeFormatStorageAdaptor; -import net.momirealms.craftengine.bukkit.compatibility.leveler.AuraSkillsLevelerProvider; -import net.momirealms.craftengine.bukkit.compatibility.modelengine.ModelEngineModel; -import net.momirealms.craftengine.bukkit.compatibility.modelengine.ModelEngineUtils; +import net.momirealms.craftengine.bukkit.compatibility.leveler.*; +import net.momirealms.craftengine.bukkit.compatibility.model.freeminecraftmodels.FreeMinecraftModelsModel; +import net.momirealms.craftengine.bukkit.compatibility.model.modelengine.ModelEngineModel; +import net.momirealms.craftengine.bukkit.compatibility.model.modelengine.ModelEngineUtils; import net.momirealms.craftengine.bukkit.compatibility.mythicmobs.MythicMobsListener; import net.momirealms.craftengine.bukkit.compatibility.papi.PlaceholderAPIUtils; import net.momirealms.craftengine.bukkit.compatibility.permission.LuckPermsEventListeners; @@ -43,7 +45,8 @@ public class BukkitCompatibilityManager implements CompatibilityManager { this.plugin = plugin; this.modelProviders = new HashMap<>(Map.of( "ModelEngine", ModelEngineModel::new, - "BetterModel", BetterModelModel::new + "BetterModel", BetterModelModel::new, + "FreeMinecraftModels", FreeMinecraftModelsModel::new )); this.levelerProviders = new HashMap<>(); } @@ -105,6 +108,29 @@ public class BukkitCompatibilityManager implements CompatibilityManager { this.registerLevelerProvider("AuraSkills", new AuraSkillsLevelerProvider()); logHook("AuraSkills"); } + if (this.isPluginEnabled("AureliumSkills")) { + this.registerLevelerProvider("AureliumSkills", new AureliumSkillsLevelerProvider()); + } + if (this.isPluginEnabled("McMMO")) { + this.registerLevelerProvider("McMMO", new McMMOLevelerProvider()); + logHook("McMMO"); + } + if (this.isPluginEnabled("MMOCore")) { + this.registerLevelerProvider("MMOCore", new MMOCoreLevelerProvider()); + logHook("MMOCore"); + } + if (this.isPluginEnabled("Jobs")) { + registerLevelerProvider("Jobs", new JobsRebornLevelerProvider()); + logHook("Jobs"); + } + if (this.isPluginEnabled("EcoSkills")) { + registerLevelerProvider("EcoSkills", new EcoSkillsLevelerProvider()); + logHook("EcoSkills"); + } + if (this.isPluginEnabled("EcoJobs")) { + registerLevelerProvider("EcoJobs", new EcoJobsLevelerProvider()); + logHook("EcoJobs"); + } if (this.isPluginEnabled("MythicMobs")) { BukkitItemManager.instance().registerExternalItemProvider(new MythicMobsProvider()); new MythicMobsListener(this.plugin); @@ -231,6 +257,10 @@ public class BukkitCompatibilityManager implements CompatibilityManager { itemManager.registerExternalItemProvider(new MMOItemsProvider()); logHook("MMOItems"); } + if (this.isPluginEnabled("CustomFishing")) { + itemManager.registerExternalItemProvider(new CustomFishingProvider()); + logHook("CustomFishing"); + } } private Plugin getPlugin(String name) { diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/item/CustomFishingProvider.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/item/CustomFishingProvider.java new file mode 100644 index 000000000..e32e03631 --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/item/CustomFishingProvider.java @@ -0,0 +1,23 @@ +package net.momirealms.craftengine.bukkit.compatibility.item; + +import net.momirealms.craftengine.core.item.ExternalItemProvider; +import net.momirealms.craftengine.core.item.ItemBuildContext; +import net.momirealms.customfishing.api.BukkitCustomFishingPlugin; +import net.momirealms.customfishing.api.mechanic.context.Context; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.Nullable; + +public class CustomFishingProvider implements ExternalItemProvider { + @Override + public String plugin() { + return "CustomFishing"; + } + + @Nullable + @Override + public ItemStack build(String id, ItemBuildContext context) { + return BukkitCustomFishingPlugin.getInstance().getItemManager() + .buildInternal(Context.player(((Player) context.player().platformPlayer())), id); + } +} diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/AureliumSkillsLevelerProvider.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/AureliumSkillsLevelerProvider.java new file mode 100644 index 000000000..db609f775 --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/AureliumSkillsLevelerProvider.java @@ -0,0 +1,27 @@ +package net.momirealms.craftengine.bukkit.compatibility.leveler; + +import com.archyx.aureliumskills.api.AureliumAPI; +import com.archyx.aureliumskills.leveler.Leveler; +import com.archyx.aureliumskills.skills.SkillRegistry; +import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.plugin.compatibility.LevelerProvider; + +public class AureliumSkillsLevelerProvider implements LevelerProvider { + private final Leveler leveler; + private final SkillRegistry skillRegistry; + + public AureliumSkillsLevelerProvider() { + this.leveler = AureliumAPI.getPlugin().getLeveler(); + this.skillRegistry = AureliumAPI.getPlugin().getSkillRegistry(); + } + + @Override + public void addExp(Player player, String target, double amount) { + this.leveler.addXp(((org.bukkit.entity.Player) player.platformPlayer()), this.skillRegistry.getSkill(target), amount); + } + + @Override + public int getLevel(Player player, String target) { + return AureliumAPI.getSkillLevel(((org.bukkit.entity.Player) player.platformPlayer()), this.skillRegistry.getSkill(target)); + } +} diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/EcoJobsLevelerProvider.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/EcoJobsLevelerProvider.java new file mode 100644 index 000000000..37bfca61b --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/EcoJobsLevelerProvider.java @@ -0,0 +1,28 @@ +package net.momirealms.craftengine.bukkit.compatibility.leveler; + +import com.willfp.ecojobs.api.EcoJobsAPI; +import com.willfp.ecojobs.jobs.Job; +import com.willfp.ecojobs.jobs.Jobs; +import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.plugin.compatibility.LevelerProvider; + +public class EcoJobsLevelerProvider implements LevelerProvider { + + @Override + public void addExp(Player player, String target, double amount) { + org.bukkit.entity.Player bukkitPlayer = (org.bukkit.entity.Player) player.platformPlayer(); + for (Job job : EcoJobsAPI.getActiveJobs(bukkitPlayer)) { + if (job.getId().equals(target)) { + EcoJobsAPI.giveJobExperience(bukkitPlayer, job, amount); + return; + } + } + } + + @Override + public int getLevel(Player player, String target) { + Job job = Jobs.getByID(target); + if (job == null) return 0; + return EcoJobsAPI.getJobLevel(((org.bukkit.entity.Player) player.platformPlayer()), job); + } +} diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/EcoSkillsLevelerProvider.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/EcoSkillsLevelerProvider.java new file mode 100644 index 000000000..c22e33bef --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/EcoSkillsLevelerProvider.java @@ -0,0 +1,21 @@ +package net.momirealms.craftengine.bukkit.compatibility.leveler; + +import com.willfp.ecoskills.api.EcoSkillsAPI; +import com.willfp.ecoskills.skills.Skills; +import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.plugin.compatibility.LevelerProvider; + +import java.util.Objects; + +public class EcoSkillsLevelerProvider implements LevelerProvider { + + @Override + public void addExp(Player player, String target, double amount) { + EcoSkillsAPI.gainSkillXP(((org.bukkit.entity.Player) player.platformPlayer()), Objects.requireNonNull(Skills.INSTANCE.getByID(target)), amount); + } + + @Override + public int getLevel(Player player, String target) { + return EcoSkillsAPI.getSkillLevel(((org.bukkit.entity.Player) player.platformPlayer()), Objects.requireNonNull(Skills.INSTANCE.getByID(target))); + } +} diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/JobsRebornLevelerProvider.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/JobsRebornLevelerProvider.java new file mode 100644 index 000000000..47cc9fd5a --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/JobsRebornLevelerProvider.java @@ -0,0 +1,30 @@ +package net.momirealms.craftengine.bukkit.compatibility.leveler; + +import com.gamingmesh.jobs.Jobs; +import com.gamingmesh.jobs.container.Job; +import com.gamingmesh.jobs.container.JobProgression; +import com.gamingmesh.jobs.container.JobsPlayer; +import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.plugin.compatibility.LevelerProvider; + +public class JobsRebornLevelerProvider implements LevelerProvider { + + @Override + public void addExp(Player player, String target, double amount) { + JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player.uuid()); + Job job = Jobs.getJob(target); + if (jobsPlayer != null && jobsPlayer.isInJob(job)) { + Jobs.getPlayerManager().addExperience(jobsPlayer, job, amount); + } + } + + @Override + public int getLevel(Player player, String target) { + JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player.uuid()); + if (jobsPlayer != null) { + JobProgression jobProgression = jobsPlayer.getJobProgression(Jobs.getJob(target)); + return jobProgression.getLevel(); + } + return 0; + } +} diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/MMOCoreLevelerProvider.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/MMOCoreLevelerProvider.java new file mode 100644 index 000000000..e7134e6ca --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/MMOCoreLevelerProvider.java @@ -0,0 +1,20 @@ +package net.momirealms.craftengine.bukkit.compatibility.leveler; + +import net.Indyuce.mmocore.MMOCore; +import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.experience.EXPSource; +import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.plugin.compatibility.LevelerProvider; + +public class MMOCoreLevelerProvider implements LevelerProvider { + + @Override + public void addExp(Player player, String target, double amount) { + MMOCore.plugin.professionManager.get(target).giveExperience(PlayerData.get(player.uuid()), amount, null , EXPSource.OTHER); + } + + @Override + public int getLevel(Player player, String target) { + return PlayerData.get(player.uuid()).getCollectionSkills().getLevel(MMOCore.plugin.professionManager.get(target)); + } +} diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/McMMOLevelerProvider.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/McMMOLevelerProvider.java new file mode 100644 index 000000000..492eb9949 --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/leveler/McMMOLevelerProvider.java @@ -0,0 +1,19 @@ +package net.momirealms.craftengine.bukkit.compatibility.leveler; + +import com.gmail.nossr50.api.ExperienceAPI; +import com.gmail.nossr50.datatypes.skills.PrimarySkillType; +import net.momirealms.craftengine.core.entity.player.Player; +import net.momirealms.craftengine.core.plugin.compatibility.LevelerProvider; + +public class McMMOLevelerProvider implements LevelerProvider { + + @Override + public void addExp(Player player, String target, double amount) { + ExperienceAPI.addRawXP((org.bukkit.entity.Player) player.platformPlayer(), target, (float) amount, "UNKNOWN"); + } + + @Override + public int getLevel(Player player, String target) { + return ExperienceAPI.getLevel((org.bukkit.entity.Player) player.platformPlayer(), PrimarySkillType.valueOf(target)); + } +} diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/bettermodel/BetterModelModel.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/bettermodel/BetterModelModel.java similarity index 88% rename from bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/bettermodel/BetterModelModel.java rename to bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/bettermodel/BetterModelModel.java index 5dfa9c816..bfda089ba 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/bettermodel/BetterModelModel.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/bettermodel/BetterModelModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.bukkit.compatibility.bettermodel; +package net.momirealms.craftengine.bukkit.compatibility.model.bettermodel; import net.momirealms.craftengine.core.entity.AbstractEntity; import net.momirealms.craftengine.core.entity.furniture.AbstractExternalModel; diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/bettermodel/BetterModelUtils.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/bettermodel/BetterModelUtils.java similarity index 86% rename from bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/bettermodel/BetterModelUtils.java rename to bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/bettermodel/BetterModelUtils.java index 93696e7f5..eb103dc80 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/bettermodel/BetterModelUtils.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/bettermodel/BetterModelUtils.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.bukkit.compatibility.bettermodel; +package net.momirealms.craftengine.bukkit.compatibility.model.bettermodel; import kr.toxicity.model.api.BetterModel; import kr.toxicity.model.api.data.renderer.BlueprintRenderer; diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/freeminecraftmodels/FreeMinecraftModelsModel.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/freeminecraftmodels/FreeMinecraftModelsModel.java new file mode 100644 index 000000000..6556557fb --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/freeminecraftmodels/FreeMinecraftModelsModel.java @@ -0,0 +1,23 @@ +package net.momirealms.craftengine.bukkit.compatibility.model.freeminecraftmodels; + +import net.momirealms.craftengine.core.entity.AbstractEntity; +import net.momirealms.craftengine.core.entity.furniture.AbstractExternalModel; + +public class FreeMinecraftModelsModel extends AbstractExternalModel { + + + public FreeMinecraftModelsModel(String id) { + super(id); + } + + @Override + public String plugin() { + return "FreeMinecraftModels"; + } + + @Override + public void bindModel(AbstractEntity entity) { + org.bukkit.entity.Entity bukkitEntity = (org.bukkit.entity.Entity) entity.literalObject(); + FreeMinecraftModelsUtils.bindModel(bukkitEntity, id()); + } +} diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/freeminecraftmodels/FreeMinecraftModelsUtils.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/freeminecraftmodels/FreeMinecraftModelsUtils.java new file mode 100644 index 000000000..3016e82e7 --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/freeminecraftmodels/FreeMinecraftModelsUtils.java @@ -0,0 +1,42 @@ +package net.momirealms.craftengine.bukkit.compatibility.model.freeminecraftmodels; + +import com.magmaguy.freeminecraftmodels.customentity.StaticEntity; +import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; +import net.momirealms.craftengine.bukkit.plugin.scheduler.impl.FoliaTask; +import net.momirealms.craftengine.core.plugin.scheduler.SchedulerTask; +import net.momirealms.craftengine.core.util.VersionHelper; +import org.bukkit.entity.Entity; + +public class FreeMinecraftModelsUtils { + + public static void bindModel(Entity base, String id) { + StaticEntity staticEntity = StaticEntity.create(id, base.getLocation()); + if (staticEntity != null) { + new FreeMinecraftModelsModelTask(staticEntity, base); + } + } + + public static class FreeMinecraftModelsModelTask implements Runnable { + private final StaticEntity staticEntity; + private final Entity base; + private final SchedulerTask task; + + public FreeMinecraftModelsModelTask(StaticEntity staticEntity, Entity base) { + this.staticEntity = staticEntity; + this.base = base; + if (VersionHelper.isFolia()) { + this.task = new FoliaTask(base.getScheduler().runAtFixedRate(BukkitCraftEngine.instance().javaPlugin(), (t) -> this.run(), () -> {}, 1, 1)); + } else { + this.task = BukkitCraftEngine.instance().scheduler().sync().runRepeating(this, 1, 1); + } + } + + @Override + public void run() { + if (!this.base.isValid()) { + this.staticEntity.remove(); + this.task.cancel(); + } + } + } +} diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/modelengine/ModelEngineModel.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/modelengine/ModelEngineModel.java similarity index 88% rename from bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/modelengine/ModelEngineModel.java rename to bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/modelengine/ModelEngineModel.java index 8ce03f0d6..a4d35dc4e 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/modelengine/ModelEngineModel.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/modelengine/ModelEngineModel.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.bukkit.compatibility.modelengine; +package net.momirealms.craftengine.bukkit.compatibility.model.modelengine; import net.momirealms.craftengine.core.entity.AbstractEntity; import net.momirealms.craftengine.core.entity.furniture.AbstractExternalModel; diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/modelengine/ModelEngineUtils.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/modelengine/ModelEngineUtils.java similarity index 92% rename from bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/modelengine/ModelEngineUtils.java rename to bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/modelengine/ModelEngineUtils.java index a2f952689..b32074691 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/modelengine/ModelEngineUtils.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/model/modelengine/ModelEngineUtils.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.bukkit.compatibility.modelengine; +package net.momirealms.craftengine.bukkit.compatibility.model.modelengine; import com.ticxo.modelengine.api.ModelEngineAPI; import com.ticxo.modelengine.api.model.ActiveModel; diff --git a/bukkit/paper-loader/build.gradle.kts b/bukkit/paper-loader/build.gradle.kts index 2ffb47974..48c20fc80 100644 --- a/bukkit/paper-loader/build.gradle.kts +++ b/bukkit/paper-loader/build.gradle.kts @@ -77,14 +77,22 @@ paper { // external models register("ModelEngine") { required = false } register("BetterModel") { required = false } + register("FreeMinecraftModels") { required = false } // external items register("NeigeItems") { required = false } register("MMOItems") { required = false } register("MythicMobs") { required = false } + register("CustomFishing") { required = false } // leveler register("AuraSkills") { required = false } + register("AureliumSkills") { required = false } + register("McMMO") { required = false } + register("MMOCore") { required = false } + register("Jobs") { required = false } + register("EcoSkills") { required = false } + register("EcoJobs") { required = false } // anti grief lib register("Dominion") { required = false } diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java index cab15452d..b9f73c267 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/AbstractFurnitureManager.java @@ -122,6 +122,8 @@ public abstract class AbstractFurnitureManager implements FurnitureManager { externalModel = Optional.of(plugin.compatibilityManager().createModel("ModelEngine", placementArguments.get("model-engine").toString())); } else if (placementArguments.containsKey("better-model")) { externalModel = Optional.of(plugin.compatibilityManager().createModel("BetterModel", placementArguments.get("better-model").toString())); + } else if (placementArguments.containsKey("free-minecraft-models")) { + externalModel = Optional.of(plugin.compatibilityManager().createModel("FreeMinecraftModels", placementArguments.get("free-minecraft-models").toString())); } else { externalModel = Optional.empty(); }