9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-19 15:09:15 +00:00

feat(compatibility): 添加多个插件的兼容性支持

- 兼容 AureliumSkills、McMMO、MMOCore、Jobs、EcoSkills 和 EcoJobs 的等级支持
- 兼容 FreeMinecraftModels 模型放置模型
- 兼容从 CustomFishing 获取物品
This commit is contained in:
jhqwqmc
2025-06-14 11:53:07 +08:00
parent fd561d0164
commit 6fa6ebe3f0
17 changed files with 303 additions and 9 deletions

View File

@@ -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 {

View File

@@ -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) {

View File

@@ -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<ItemStack> {
@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);
}
}

View File

@@ -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));
}
}

View File

@@ -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);
}
}

View File

@@ -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)));
}
}

View File

@@ -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;
}
}

View File

@@ -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));
}
}

View File

@@ -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));
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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());
}
}

View File

@@ -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();
}
}
}
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 }

View File

@@ -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();
}