diff --git a/fakeplayer-core/pom.xml b/fakeplayer-core/pom.xml index 1d07a2d..7263e98 100644 --- a/fakeplayer-core/pom.xml +++ b/fakeplayer-core/pom.xml @@ -77,6 +77,14 @@ provided + + com.github.jikoo + OpenInv + 5.1.1 + system + ${project.basedir}/../lib/OpenInv.jar + + diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java index fb4c2f2..8bc0abb 100644 --- a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/FakeplayerModule.java @@ -8,13 +8,18 @@ import io.github.hello09x.fakeplayer.core.manager.FakeplayerList; import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager; import io.github.hello09x.fakeplayer.core.manager.invsee.DefaultInvseeManagerImpl; import io.github.hello09x.fakeplayer.core.manager.invsee.InvseeManager; +import io.github.hello09x.fakeplayer.core.manager.invsee.OpenInvInvseeManagerImpl; +import io.github.hello09x.fakeplayer.core.util.ClassUtils; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; import java.util.ServiceLoader; +import java.util.logging.Logger; public class FakeplayerModule extends AbstractModule { + private final static Logger log = Main.getInstance().getLogger(); + @Override protected void configure() { super.bind(Plugin.class).toInstance(Main.getInstance()); @@ -23,6 +28,12 @@ public class FakeplayerModule extends AbstractModule { @Provides @Singleton public InvseeManager invseeManager(FakeplayerManager fakeplayerManager, FakeplayerList fakeplayerList) { + if (Bukkit.getPluginManager().isPluginEnabled("OpenInv") && ClassUtils.isClassExists("com.lishid.openinv.IOpenInv")) { + log.info("Using OpenInv as invsee implementation"); + return new OpenInvInvseeManagerImpl(fakeplayerManager, fakeplayerList); + } + + log.info("Using default invsee implementation"); return new DefaultInvseeManagerImpl(fakeplayerManager, fakeplayerList); } diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/OpenInvInvseeManagerImpl.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/OpenInvInvseeManagerImpl.java new file mode 100644 index 0000000..1a83df6 --- /dev/null +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/manager/invsee/OpenInvInvseeManagerImpl.java @@ -0,0 +1,38 @@ +package io.github.hello09x.fakeplayer.core.manager.invsee; + +import com.google.common.base.Throwables; +import com.lishid.openinv.IOpenInv; +import io.github.hello09x.fakeplayer.core.Main; +import io.github.hello09x.fakeplayer.core.manager.FakeplayerList; +import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryView; +import org.jetbrains.annotations.NotNull; + +import java.util.logging.Logger; + +/** + * @author tanyaofei + * @since 2024/8/12 + **/ +public class OpenInvInvseeManagerImpl extends AbstractInvseeManager { + + private final static Logger log = Main.getInstance().getLogger(); + private final IOpenInv openInv; + + public OpenInvInvseeManagerImpl(FakeplayerManager manager, FakeplayerList fakeplayerList) { + super(manager, fakeplayerList); + this.openInv = (IOpenInv) Bukkit.getPluginManager().getPlugin("OpenInv"); + } + + @Override + protected InventoryView openInventory(@NotNull Player viewer, @NotNull Player whom) { + try { + return openInv.openInventory(viewer, openInv.getSpecialInventory(whom, true)); + } catch (InstantiationException e) { + log.warning("Failed to %s's open inventory for %s\n%s".formatted(whom.getName(), viewer.getName(), Throwables.getStackTraceAsString(e))); + return null; + } + } +} diff --git a/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/util/ClassUtils.java b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/util/ClassUtils.java new file mode 100644 index 0000000..035b380 --- /dev/null +++ b/fakeplayer-core/src/main/java/io/github/hello09x/fakeplayer/core/util/ClassUtils.java @@ -0,0 +1,19 @@ +package io.github.hello09x.fakeplayer.core.util; + +/** + * @author tanyaofei + * @since 2024/8/12 + **/ +public class ClassUtils { + + public static boolean isClassExists(String className) { + try { + Class.forName(className); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } + + +} diff --git a/fakeplayer-core/src/main/resources/plugin.yml b/fakeplayer-core/src/main/resources/plugin.yml index 8cb6d26..429c9c7 100644 --- a/fakeplayer-core/src/main/resources/plugin.yml +++ b/fakeplayer-core/src/main/resources/plugin.yml @@ -7,6 +7,9 @@ website: 'https://github.com/tanyaofei/minecraft-fakeplayer' depend: - CommandAPI +softdepend: + - OpenInv + permissions: fakeplayer.command.spawn: description: 'Allow player to run /fp spawn'