9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-30 20:39:10 +00:00

添加新方法

This commit is contained in:
XiaoMoMi
2025-05-19 04:22:01 +08:00
parent af5c63e940
commit 15475b0538
17 changed files with 342 additions and 73 deletions

View File

@@ -1,10 +1,13 @@
package net.momirealms.craftengine.bukkit.plugin.gui;
import net.kyori.adventure.text.Component;
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
import net.momirealms.craftengine.core.plugin.gui.AbstractGui;
import net.momirealms.craftengine.core.plugin.gui.Gui;
import net.momirealms.craftengine.core.plugin.gui.GuiManager;
import net.momirealms.craftengine.core.plugin.gui.Inventory;
import net.momirealms.craftengine.bukkit.util.ComponentUtils;
import net.momirealms.craftengine.bukkit.util.LegacyInventoryUtils;
import net.momirealms.craftengine.bukkit.util.Reflections;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.gui.*;
import net.momirealms.craftengine.core.util.VersionHelper;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -13,6 +16,7 @@ import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.inventory.MenuType;
public class BukkitGuiManager implements GuiManager, Listener {
private final BukkitCraftEngine plugin;
@@ -31,6 +35,47 @@ public class BukkitGuiManager implements GuiManager, Listener {
HandlerList.unregisterAll(this);
}
@SuppressWarnings("UnstableApiUsage")
@Override
public void openInventory(net.momirealms.craftengine.core.entity.player.Player player, GuiType guiType) {
Player bukkitPlayer = (Player) player.platformPlayer();
if (VersionHelper.isOrAbove1_21_4()) {
switch (guiType) {
case ANVIL -> MenuType.ANVIL.create(bukkitPlayer).open();
case LOOM -> MenuType.LOOM.create(bukkitPlayer).open();
case ENCHANTMENT -> MenuType.ENCHANTMENT.create(bukkitPlayer).open();
case CRAFTING -> MenuType.CRAFTING.create(bukkitPlayer).open();
case CARTOGRAPHY -> MenuType.CARTOGRAPHY_TABLE.create(bukkitPlayer).open();
case SMITHING -> MenuType.SMITHING.create(bukkitPlayer).open();
case GRINDSTONE -> MenuType.GRINDSTONE.create(bukkitPlayer).open();
}
} else {
switch (guiType) {
case ANVIL -> LegacyInventoryUtils.openAnvil(bukkitPlayer);
case LOOM -> LegacyInventoryUtils.openLoom(bukkitPlayer);
case GRINDSTONE -> LegacyInventoryUtils.openGrindstone(bukkitPlayer);
case SMITHING -> LegacyInventoryUtils.openSmithingTable(bukkitPlayer);
case CRAFTING -> LegacyInventoryUtils.openWorkbench(bukkitPlayer);
case ENCHANTMENT -> LegacyInventoryUtils.openEnchanting(bukkitPlayer);
case CARTOGRAPHY -> LegacyInventoryUtils.openCartographyTable(bukkitPlayer);
}
}
}
@Override
public void updateInventoryTitle(net.momirealms.craftengine.core.entity.player.Player player, Component component) {
Object nmsPlayer = player.serverPlayer();
try {
Object containerMenu = Reflections.field$Player$containerMenu.get(nmsPlayer);
int containerId = Reflections.field$AbstractContainerMenu$containerId.getInt(containerMenu);
Object menuType = Reflections.field$AbstractContainerMenu$menuType.get(containerMenu);
Object packet = Reflections.constructor$ClientboundOpenScreenPacket.newInstance(containerId, menuType, ComponentUtils.adventureToMinecraft(component));
player.sendPacket(packet, false);
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to update inventory title", e);
}
}
@Override
public Inventory createInventory(Gui gui, int size) {
CraftEngineInventoryHolder holder = new CraftEngineInventoryHolder(gui);

View File

@@ -31,7 +31,7 @@ public class BukkitInventory implements Inventory {
Reflections.field$Player$containerMenu.set(nmsPlayer, menu);
Reflections.method$ServerPlayer$initMenu.invoke(nmsPlayer, menu);
} catch (Exception e) {
CraftEngine.instance().logger().warn("Failed to update inventory title", e);
CraftEngine.instance().logger().warn("Failed to create bukkit inventory", e);
}
}