> For the complete documentation index, see [llms.txt](https://docs.olziedev.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.olziedev.com/projects/playerauctions/api.md).

# Plugin API

## Java Docs

Here you can view the Java Docs [here](https://javadocs.olziedev.com/playerauctions) for Player Auctions which provides you all the usages and descriptions of the API.

## Maven Repository

Do you want to integrate with Player Auctions in your plugin? You can use the OlzieDev repo to build against the Player Auctions API.

Under `repositories` in your `pom.xml`, you need to add a new `repository` for the repo.

```java
<repositories>
    ...
    <repository>
        <id>olzie-repo</id>
        <url>https://repo.olziedev.com/</url>
    </repository>
</repositories>
```

Next, add Player Auctions as a `dependency` under `dependencies`:

`VERSION_HERE` would be your exact plugin version, you will not need to update the API version every time a plugin update is out, only when an api update happens.

```java
<dependencies>
    ...
    <dependency>
        <groupId>com.olziedev</groupId>
        <artifactId>playerauctions-api</artifactId>
        <version>VERSION_HERE</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
```

## How to access the API

You can access the Player Auctions API by getting the instance. If the plugin hasn't fully loaded the instance will return null, you can use a callback to access the API when its ready.

```java
/* 
Accessing the instance, can return null if not loaded.

This instance can also change when a plugin reload has 
happened, so its not advisted to use this
*/ 
PlayerAuctionsAPI api = PlayerAuctionsAPI.getInstance(); 

PlayerAuctionsAPI.getInstance(api -> { // accessing the instance when its ready.

});
```

## Some examples

Here is an example on how to create a player auction.

```java
PlayerAuctionsAPI.getInstance(api -> {
    APlayer seller = api.getAuctionPlayer(UUID.randomUUID());
    // now this could possibly throw an error if the default product provider is not an ItemStack provider.
    // By default player auctions does use an ItemStack provider, but another plugin might integrate and change it.
    AProductProvider<ItemStack> provider = (AProductProvider<ItemStack>) api.getDefaultProductProvider();
    ItemStack itemStack = new ItemStack(Material.DIAMOND, 1);
    // you can either create your own itemstack object, it grab the item safely from their hand using provider#setupProduct(long, Player)
    api.createPlayerAuction(1000d,
                            seller,
                            provider.setupProduct(1L, itemStack),
                            false,
                            auction -> {
                            // the auction instance.
                            });
});
```

Here is an example on how to access a auction player by their UUID.

```java
PlayerAuctionsAPI.getInstance(api -> {
    APlayer player = api.getAuctionPlayer(UUID.randomUUID());
    // set all the auctions as expired.
    player.getPlayerAuctions().forEach(auction -> auction.setExpireTime(null, null, false)); 
});
```
