# MineLastDaysProxy对接指南

MineLastDaysProxy的主要职责是进行Mod与Plugin的对接。

其提供Plugin便捷调用Mod内功能的途径，同时协调Mod与Plugin的功能。

{% hint style="info" %}
对接相关文件位于proxies包中
{% endhint %}

## 一，你方作为服务提供商时

![你需要向本插件提供服务](/files/-MaW3Pn5K7BUqNd8lbCs)

位于proxies包下，有两个类负责对接

* IFunctionProvider。服务提供接口。你需要实现该接口，以提供服务。
* ProviderManager。服务对接器。在该类中注册你的实现类。

### 1. 以对接队伍服务为例

通常，若需要对接，插件将会创建一个需求接口。

{% code title="ITeamInfoProvider.java" %}

```java
//需求接口，包含需要对接的内容。
public interface ITeamInfoProvider extends IFunctionProvider {
  
  /**
  *  判断两玩家是否是队友
  */
  boolean isTeammate(UUID playrUUID1, UUID playerUUID2);
  
  /**
  *  获取某玩家的队友
  */
  ArrayList<UUID> getTeammates(UUID playerUUID);
}
```

{% endcode %}

你方需要对该接口进行实现，以提供功能。

{% code title="TeamInfoProviderImpl.java" %}

```java
//为需求接口写入你的实现方法
public class TeamInfoProviderImpl implements ITeamInfoProvider{

    /**
    *  判断两玩家是否是队友
    */
    public boolean isTeammate(UUID playrUUID1, UUID playerUUID2){
        boolean result = false;
        //TODO 你的逻辑代码
        return result;
    }
    
    //其他部分同理...
    
}
```

{% endcode %}

至此，你已经完成对接口的实现。

接下来，你需要在服务对接器注册你的实现类。我们通常在插件开启时进行。

{% code title="YourPlugin.java" %}

```java
public class YourPlugin extends JavaPlugin{

    @Override
    public void onEnable(){
        //注册你的实现类
        ProviderManager.register(new TeamInfoProviderImpl());
    }

}
```

{% endcode %}

自此，你已完成对接。

{% hint style="success" %}
你可以使用ProviderManager.getProvider(ITeamInfoProvider.class)调用你的实现类，进行测试。
{% endhint %}

## 二，本插件提供功能时

![该插件作为提供方，即你方作为服务消费者](/files/-MaW3gqfzmQ2u3UQnAQp)

当该插件提供功能时，通常会提供以Manager结尾的类，以提供相应的静态方法。

### 1. 以怪物对接为例

当你需要获取怪物类型时，调用方法。

```java
//获得怪物类型
MobManager.getMobType(theEntity);
```

其他同理，可在功能提供分类下了解详细。

## 三，本插件作为对接枢纽时

在某些情况下，该插件作为一个对接枢纽，如图所示。

![作为对接枢纽时，插件A作为服务提供商，插件B作为服务消费方](/files/-MaW2dtYBsgoQZVHlecZ)

### 1. 当你方作为服务提供商时

你只需实现需求接口，并注册即可。

### 2. 当你方作为服务消费者时

由上文可知，当它方插件作为服务提供商时，需要在ProviderManager中注册其服务，该服务是允许第三方获得的。

如下所示，你可以得到目标服务接口的实现类。

```java
//获取服务
//若返回为NULL，则代表该接口未被实现。
ITeamInfoProvider iTeamInfoProvider = ProviderManager.getProvider(ITeamInfoProvider.class);

//TODO 你的使用代码
```

至此，你完成了服务的调用。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mld.doc.hyrkg.cn/master.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
