mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-19 15:09:15 +00:00
feat(compatibility): 添加 MythicMobs 支持
This commit is contained in:
@@ -7,7 +7,7 @@ repositories {
|
|||||||
maven("https://repo.rapture.pw/repository/maven-releases/") // slime world
|
maven("https://repo.rapture.pw/repository/maven-releases/") // slime world
|
||||||
maven("https://repo.infernalsuite.com/repository/maven-snapshots/") // slime world
|
maven("https://repo.infernalsuite.com/repository/maven-snapshots/") // slime world
|
||||||
maven("https://repo.momirealms.net/releases/")
|
maven("https://repo.momirealms.net/releases/")
|
||||||
maven("https://mvn.lumine.io/repository/maven-public/") // model engine
|
maven("https://mvn.lumine.io/repository/maven-public/") // model engine mythic mobs
|
||||||
maven("https://nexus.phoenixdevt.fr/repository/maven-public/") // mmoitems
|
maven("https://nexus.phoenixdevt.fr/repository/maven-public/") // mmoitems
|
||||||
maven("https://repo.viaversion.com") // via
|
maven("https://repo.viaversion.com") // via
|
||||||
maven("https://repo.skriptlang.org/releases/") // skript
|
maven("https://repo.skriptlang.org/releases/") // skript
|
||||||
@@ -47,6 +47,8 @@ dependencies {
|
|||||||
compileOnly(platform("com.intellectualsites.bom:bom-newest:1.52"))
|
compileOnly(platform("com.intellectualsites.bom:bom-newest:1.52"))
|
||||||
compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core")
|
compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core")
|
||||||
compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false }
|
compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false }
|
||||||
|
// MythicMobs
|
||||||
|
compileOnly("io.lumine:Mythic-Dist:5.9.0")
|
||||||
}
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import net.momirealms.craftengine.bukkit.compatibility.legacy.slimeworld.LegacyS
|
|||||||
import net.momirealms.craftengine.bukkit.compatibility.leveler.AuraSkillsLevelerProvider;
|
import net.momirealms.craftengine.bukkit.compatibility.leveler.AuraSkillsLevelerProvider;
|
||||||
import net.momirealms.craftengine.bukkit.compatibility.modelengine.ModelEngineModel;
|
import net.momirealms.craftengine.bukkit.compatibility.modelengine.ModelEngineModel;
|
||||||
import net.momirealms.craftengine.bukkit.compatibility.modelengine.ModelEngineUtils;
|
import net.momirealms.craftengine.bukkit.compatibility.modelengine.ModelEngineUtils;
|
||||||
|
import net.momirealms.craftengine.bukkit.compatibility.mythicmobs.MythicMobsListener;
|
||||||
import net.momirealms.craftengine.bukkit.compatibility.papi.PlaceholderAPIUtils;
|
import net.momirealms.craftengine.bukkit.compatibility.papi.PlaceholderAPIUtils;
|
||||||
import net.momirealms.craftengine.bukkit.compatibility.permission.LuckPermsEventListeners;
|
import net.momirealms.craftengine.bukkit.compatibility.permission.LuckPermsEventListeners;
|
||||||
import net.momirealms.craftengine.bukkit.compatibility.skript.SkriptHook;
|
import net.momirealms.craftengine.bukkit.compatibility.skript.SkriptHook;
|
||||||
@@ -105,6 +106,10 @@ public class BukkitCompatibilityManager implements CompatibilityManager {
|
|||||||
if (this.isPluginEnabled("AuraSkills")) {
|
if (this.isPluginEnabled("AuraSkills")) {
|
||||||
this.registerLevelerProvider("AuraSkills", new AuraSkillsLevelerProvider());
|
this.registerLevelerProvider("AuraSkills", new AuraSkillsLevelerProvider());
|
||||||
}
|
}
|
||||||
|
if (this.isPluginEnabled("MythicMobs")) {
|
||||||
|
new MythicMobsListener(this.plugin);
|
||||||
|
logHook("MythicMobs");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package net.momirealms.craftengine.bukkit.compatibility.mythicmobs;
|
||||||
|
|
||||||
|
import io.lumine.mythic.api.adapters.AbstractItemStack;
|
||||||
|
import io.lumine.mythic.api.adapters.AbstractPlayer;
|
||||||
|
import io.lumine.mythic.api.config.MythicLineConfig;
|
||||||
|
import io.lumine.mythic.api.drops.DropMetadata;
|
||||||
|
import io.lumine.mythic.api.drops.IItemDrop;
|
||||||
|
import io.lumine.mythic.api.skills.SkillCaster;
|
||||||
|
import io.lumine.mythic.bukkit.BukkitAdapter;
|
||||||
|
import io.lumine.mythic.core.drops.droppables.ItemDrop;
|
||||||
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
|
import net.momirealms.craftengine.core.item.CustomItem;
|
||||||
|
import net.momirealms.craftengine.core.item.ItemBuildContext;
|
||||||
|
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||||
|
import net.momirealms.craftengine.core.util.MCUtils;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class CraftEngineItemDrop extends ItemDrop implements IItemDrop {
|
||||||
|
private final CustomItem<ItemStack> customItem;
|
||||||
|
|
||||||
|
public CraftEngineItemDrop(String line, MythicLineConfig config, CustomItem<ItemStack> customItem) {
|
||||||
|
super(line, config);
|
||||||
|
this.customItem = customItem;
|
||||||
|
CraftEngine.instance().debug(() -> "[MM调试] " + customItem.id() + "注册成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AbstractItemStack getDrop(DropMetadata dropMetadata, double amount) {
|
||||||
|
CraftEngine.instance().debug(() -> "[MM调试] getDrop() dropMetadata={" + dropMetadata + "}, amount={" + amount + "}");
|
||||||
|
ItemBuildContext context = ItemBuildContext.EMPTY;
|
||||||
|
SkillCaster caster = dropMetadata.getCaster();
|
||||||
|
if (caster != null && caster.getEntity() instanceof AbstractPlayer abstractPlayer) {
|
||||||
|
Entity bukkitEntity = abstractPlayer.getBukkitEntity();
|
||||||
|
if (bukkitEntity instanceof Player bukkitPlayer) {
|
||||||
|
var player = BukkitCraftEngine.instance().adapt(bukkitPlayer);
|
||||||
|
context = ItemBuildContext.of(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int amountInt = MCUtils.fastFloor(amount + 0.5F);
|
||||||
|
ItemStack itemStack = this.customItem.buildItemStack(context, amountInt);
|
||||||
|
return BukkitAdapter.adapt(itemStack).amount(amountInt);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package net.momirealms.craftengine.bukkit.compatibility.mythicmobs;
|
||||||
|
|
||||||
|
import io.lumine.mythic.api.config.MythicLineConfig;
|
||||||
|
import io.lumine.mythic.bukkit.events.MythicDropLoadEvent;
|
||||||
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
public class MythicMobsListener implements Listener {
|
||||||
|
private final BukkitCraftEngine plugin;
|
||||||
|
|
||||||
|
public MythicMobsListener(BukkitCraftEngine plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
Bukkit.getPluginManager().registerEvents(this, plugin.javaPlugin());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onMythicDropLoad(MythicDropLoadEvent event) {
|
||||||
|
if (!event.getDropName().equalsIgnoreCase("craftengine")) return;
|
||||||
|
String argument = event.getArgument();
|
||||||
|
plugin.debug(() -> "[MM调试] " + argument);
|
||||||
|
Key itemId = Key.of(argument);
|
||||||
|
this.plugin.itemManager().getCustomItem(itemId).ifPresent(customItem -> {
|
||||||
|
String line = event.getContainer().getConfigLine();
|
||||||
|
MythicLineConfig config = event.getConfig();
|
||||||
|
event.register(new CraftEngineItemDrop(line, config, customItem));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -92,6 +92,9 @@ paper {
|
|||||||
register("ViaVersion") {
|
register("ViaVersion") {
|
||||||
required = false
|
required = false
|
||||||
}
|
}
|
||||||
|
register("MythicMobs") {
|
||||||
|
required = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -588,6 +588,7 @@ public class BukkitBlockManager extends AbstractBlockManager {
|
|||||||
Object resourceLocation = KeyUtils.toResourceLocation(BlockKeys.NOTE_BLOCK);
|
Object resourceLocation = KeyUtils.toResourceLocation(BlockKeys.NOTE_BLOCK);
|
||||||
Object block = CoreReflections.method$Registry$get.invoke(MBuiltInRegistries.BLOCK, resourceLocation);
|
Object block = CoreReflections.method$Registry$get.invoke(MBuiltInRegistries.BLOCK, resourceLocation);
|
||||||
Object stateDefinition = CoreReflections.field$Block$StateDefinition.get(block);
|
Object stateDefinition = CoreReflections.field$Block$StateDefinition.get(block);
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
ImmutableList<Object> states = (ImmutableList<Object>) CoreReflections.field$StateDefinition$states.get(stateDefinition);
|
ImmutableList<Object> states = (ImmutableList<Object>) CoreReflections.field$StateDefinition$states.get(stateDefinition);
|
||||||
for (Object state : states) {
|
for (Object state : states) {
|
||||||
BlockStateUtils.CLIENT_SIDE_NOTE_BLOCKS.put(state, new Object());
|
BlockStateUtils.CLIENT_SIDE_NOTE_BLOCKS.put(state, new Object());
|
||||||
|
|||||||
Reference in New Issue
Block a user