gpt4 book ai didi

java - 我该怎么办呢?不同项目之间的沟通? C#

转载 作者:行者123 更新时间:2023-12-01 12:46:02 26 4
gpt4 key购买 nike

好吧,我不知道如何解释这一点,也不知道如何去做,但我会尝试逐步解释我想要的内容。

我想要创建一个包含 EntitySpawnEvent 对象等的 API。它可能看起来像这样:

namespace ExampleAPI
{
class EntitySpawnEvent
{
private bool cancelled;
private Entity entity;

public EntitySpawnEvent(Entity entity)
{
this.entity = entity;
this.cancelled = false;
}

public void SetCancelled(bool cancelled)
{
this.cancelled = cancelled;
}

public bool IsCancelled()
{
return this.cancelled;
}
}
}

然后我将拥有一个使用此 API 的服务器。该服务器还将加载也使用该 API 的插件。服务器可能是这样的:

using System.Generics;
using ExampleAPI;

namespace ExampleServer
{
class Server
{
private List<Plugin> plugins;

public OnEnable()
{
LoadPlugins();
}

private void LoadPlugins()
{
// Loop through all "plugins" in the "/plugins" folder.
// Add them all to the list of plugins.
}
}
}

然后当服务器想要生成一个实体时,它会将事件抛出给所有插件,插件可以操纵事件的信息。例如,是否取消事件。该插件的事件监听器可能如下所示:

using ExampleAPI;

namespace ExamplePlugin
{
class Plugin : EventListener
{
public void onEntitySpawn(EntitySpawnEvent event)
{
event.SetCancelled(true);
}
}
}

服务器会抛出这样的东西:

using ExampleAPI;

namespace ExampleServer
{
class ExampleEventThrower
{
private Server server;

public ExampleEventThrower(Server server)
{
this.server = server;
SpawnEntity();
}

void SpawnEntity()
{
EntitySpawnEvent event = new EntitySpawnEvent(new Entity()); // Entity would also be part of the API
foreach (Plugin plugin in server.GetPlugins())
{
plugin.onEntitySpawn(event); // Here the plugin could manipulate the values of the EntitySpawnEvent
}

if (!event.IsCancelled())
{
// Spawn entity
}
}
}
}

当然,这些只是非常基本的代码示例,但它们应该有助于解释我想要的内容。

基本上,我想知道和做的事情如下:

我有一个导出的服务器。服务器有一个/plugins 文件夹用户可以使用API​​制作自己的插件,导出它们并将它们放在/plugins文件夹中服务器将加载插件并让它修改所有事件等。

我的关键问题是,应该如何导出和加载插件,以便它们可以操纵事件等?我是否将它们导出为 DDL?我不知道。我想这有点类似于 Bukkit 的工作方式,但一切都在 Java 中,您只需将其导出为 .jar 文件。

任何帮助将不胜感激。谢谢!

最佳答案

需要注意的东西很少......

听起来您想让插件从您了解的接口(interface)运行,并在运行时加载插件。

这应该可以帮助您构建 DLL:

http://msdn.microsoft.com/en-us/library/3707x96z.aspx

这应该有助于在运行时动态加载 DLL:

Can I load a .NET assembly at runtime and instantiate a type knowing only the name?

关于java - 我该怎么办呢?不同项目之间的沟通? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24696195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com