531 lines
21 KiB
Markdown
531 lines
21 KiB
Markdown
---
|
|
lastUpdated: true
|
|
aside: true
|
|
sidebar: true
|
|
sidebarDepth: 3
|
|
title: API Informatie
|
|
description: API informatie over de ultimate kingdom plugin
|
|
meta_keywords: 'kingdom plugin, ultimate, minecraft plugin, spigot plugin, gameplay, API'
|
|
meta_url: 'https://ultimatekingdom.nl'
|
|
---
|
|
|
|
# API
|
|
|
|
[[toc]]
|
|
|
|
## Gradle
|
|
|
|
### repositories
|
|
```ts
|
|
repositories {
|
|
maven { url "https://repo.recorehosting.com/repository/maven-snapshots/" } // snapshots
|
|
maven { url "https://repo.recorehosting.com/repository/development/" } // beta & release candidate
|
|
```
|
|
|
|
### dependencies
|
|
|
|
#### Kingdom plugin
|
|
|
|
```ts
|
|
compileOnly 'me.map:ultimatekingdom:1.45.4.1-SNAPSHOT' //development voor deze versie is gestopt
|
|
|
|
compileOnly 'me.map:ultimatekingdom:2.12.0.0-RC1'
|
|
|
|
```
|
|
|
|
#### Exchange
|
|
|
|
```ts
|
|
compileOnly 'me.map.exchange:API:2.12.0.0-RC1'
|
|
compileOnly 'me.map.exchange:bungeecord:2.12.0.0-RC1'
|
|
compileOnly 'me.map.exchange:velocity:2.12.0.0-RC1'
|
|
```
|
|
|
|
|
|
## Toegang tot API
|
|
|
|
De plugin is via een `static class` bereikbaar.
|
|
|
|
```ts
|
|
UltimateKingdom. .....
|
|
UltimateKingdom.Kingdoms() .....
|
|
UltimateKingdom.getKingdomServer()
|
|
```
|
|
|
|
#### voorbeeld 1
|
|
|
|
```ts
|
|
public class myClass {
|
|
|
|
public void doSomething() {
|
|
|
|
Kingdom k1 = UltimateKingdom.Kingdoms().getKingdom("kingdomname"); //haal een kingdom op
|
|
Kingdom k = Kingdom.get("anotherkingdomname"); // mag ook
|
|
|
|
k1.setSlogan("&athis &fwill &cbe &6the &8new &aslogan" ,(result,kingdom) -> {
|
|
|
|
if (result.isOk()) { //result is ok...
|
|
|
|
Bukkit.getLogger().info("Changed kingdom slogan to " + kingdom.getSlogan());
|
|
|
|
} else {
|
|
|
|
Bukkit.getLogger().severe("Something has happend" + result.toString());
|
|
}
|
|
});
|
|
}
|
|
}
|
|
```
|
|
|
|
|
|
#### voorbeeld 2 KingdomPlayer
|
|
|
|
```ts
|
|
public void doSomething() {
|
|
|
|
UUID uuid = UUID.randomUUID(); //voorbeeld
|
|
KingdomPlayer playerOne = UltimateKingdom.Players().getPlayer(uuid);
|
|
KingdomPlayer playerTwo = KingdomPlayer.get(uuid); //tomayto, tomahto tomato
|
|
|
|
playerOne.setmod(false,(result,player) -> {
|
|
|
|
if (result.isOk()) {
|
|
Bukkit.getLogger().info("player:" + player.getName() + " mod " + player.isMod()); //
|
|
} else {
|
|
Bukkit.getLogger().severe(result.toString());
|
|
}
|
|
});
|
|
}
|
|
```
|
|
|
|
|
|
#### voorbeeld 3 uitzondering
|
|
|
|
Uitzondering op setRank
|
|
|
|
```ts
|
|
public void doSomething() {
|
|
|
|
UUID uuid = UUID.randomUUID(); //voorbeeld
|
|
KingdomPlayer playerOne = UltimateKingdom.Players().getPlayer(uuid);
|
|
KingdomPlayer playerTwo = KingdomPlayer.get(uuid); //tomayto, tomahto tomato
|
|
|
|
Rank rank = Rank.get("Koning");
|
|
|
|
playerOne.setRank(rank,(result,player,kingdom) -> { //[!code hl] //setrank geeft 3 objecten terug (result,player,kingdom)
|
|
|
|
if (result.isOk()) {
|
|
Bukkit.getLogger().info("player new rank :" + player.getRank().getName() + " kingdom " + kingdom.getName()); //
|
|
} else {
|
|
Bukkit.getLogger().severe(result.toString());
|
|
}
|
|
});
|
|
}
|
|
```
|
|
|
|
## Gebruikte bibliotheken
|
|
|
|
De kingdom plugin gebruikt de onderstaande bibliotheken
|
|
|
|
* [Kyori Adventure](https://github.com/KyoriPowered/adventure)
|
|
* [WorldGuardWrapper](https://github.com/CodeMC/WorldGuardWrapper)
|
|
* [xseries](https://github.com/CryptoMorin/XSeries)
|
|
* [Okaeri Placeholders](https://github.com/OkaeriPoland/okaeri-placeholders)
|
|
* [okaeri-tasker](https://github.com/OkaeriPoland/okaeri-tasker) [^1]
|
|
* [Scoreboard-library](https://github.com/MegavexNetwork/scoreboard-library)
|
|
* [Universal Scheduler ](https://github.com/DreamVoid/UniversalScheduler)
|
|
* [Simple-Yaml ](https://github.com/Carleslc/Simple-YAML)
|
|
|
|
|
|
[^1]: Er zit een aangepaste variant in de plugin, voor ondersteuning van de Universal scheduler. (UniversalTasker)
|
|
|
|
|
|
### Hooks
|
|
|
|
De onderstaande hooks/bibliotheren zijn beschikbaar.
|
|
|
|
| bibliotheken/hooks | via |
|
|
| --------------------------- | ------------------------------------------------------------------- |
|
|
| Scoreboard-library | UltimateKingdom.getKingdomServer().ScoreboardLibrary() |
|
|
| Kyori Adventure | UltimateKingdom.getKingdomServer().Adventurehook() |
|
|
| Okaeri Placeholders | UltimateKingdom.getKingdomServer().Messages().getPlaceHolders() |
|
|
| EssentialX | UltimateKingdom.getKingdomServer().EssentialsHook() |
|
|
| Universal Scheduler | UltimateKingdom.getKingdomServer().UniversalScheduler() |
|
|
| Okaeri-tasker | UltimateKingdom.getKingdomServer().Tasker() |
|
|
| Teleport queue | UltimateKingdom.getKingdomServer().QueuedTeleports() |
|
|
| Runnable queue | UltimateKingdom.getKingdomServer().QueuedRunnables() |
|
|
|
|
|
|
## Commands
|
|
|
|
We gebruiken een aangepaste brigadier van mojang.
|
|
Hieronder staat een voorbeeld van een commando die de display naam van de kingdom aanpast.
|
|
|
|
```ts
|
|
public class MyCommand extends AbstractCommand {
|
|
|
|
public list() {
|
|
super("mycommand");
|
|
setDescription("Geef hier een omschrijving"); //deze omschrijving is zichtbaar in /k help
|
|
setLongDescription("Geef hier eventueel een lange omschriving, deze is zichtbaar in /k help mycommand"); // (optioneel)
|
|
setAliases("l"); //geef hier een alias in voor het commando. (optioneel)
|
|
setPlayerOnly(true); //optioneel
|
|
setPermission("kingdom.mycommand"); //permissie
|
|
|
|
}
|
|
public void createCommand(KingdomCommand brigadierCommand) {
|
|
brigadierCommand
|
|
|
|
.then(literal("setdisplayname") //commando is dus: /k mycommand setdisplayname <kingdom naam> <string>
|
|
.requires(c -> c.hasKingdom() && c.isMod() && c.isPlayer() )
|
|
.then(argument("kingdom", KingdomArgumentType.kingdom()) //Kingdom argument
|
|
.then(argument("displayname", StringArgumentType.greedyString()) //String argument
|
|
.suggests(new StringSuggestion("geef naam op")) // "geef naam op" weergeven als suggestie bij de argument displayname
|
|
.executes(c -> {
|
|
|
|
String displayname = c.getArgument("displayname", String.class); //haal String argument op
|
|
Kingdom kingdom = c.getArgument("kingdom", Kingdom.class); //haal Kingdom argument op
|
|
|
|
kingdom.setDisplayName(displayname, (res,rm) -> {
|
|
|
|
if (res.isOk()) {
|
|
c.getSource().sendMessage("we hebben het aangepast");
|
|
} else {
|
|
c.getSource().sendMessage("Big Error... " + res);
|
|
}
|
|
});
|
|
|
|
return Command.SINGLE_SUCCESS;
|
|
}))));
|
|
|
|
}
|
|
```
|
|
|
|
|
|
### Registreren command
|
|
|
|
```ts
|
|
new MyCommand().register();
|
|
```
|
|
### ArgumentTypes
|
|
|
|
|
|
De onderstaande argumentypes zijn beschikbaar in de plugin.
|
|
|
|
| type | omschrijving |
|
|
| --------------------------- | --------------------------------------------------------------------- |
|
|
| KingdomArgumentType | argument voor kingdoms (Kingdom) |
|
|
| KingdomPlayerArgumentType | argument voor online spelers (KingdomPlayer) |
|
|
| ServerSpawnArgumentType | argument voor server spawns (KingdomLocation) |
|
|
| ServerSpawnArgumentType | argument voor rank groep (String) |
|
|
| PlayerLevelArgumentType | argument voor player levels (KingdomLevel) |
|
|
| KingdomLevelArgumentType | argument voor kingdom levels (PlayerLevel) |
|
|
| ChatChannelArgumentType | argument voor channels (Channels) |
|
|
| CommandsArgumentType | argument voor commands (AbstractCommand) |
|
|
| PlayerArgumentType | argument voor online spelers (lokaal Players) |
|
|
| MultiServerCachedPlayerType | argument voor online spelers (CachedPlayers) |
|
|
| RankArgumentTypeType | argument voor Rank (Rank) [zie voorbeeld 3](API#voorbeeld-3) |
|
|
| YesNoArgumentsType | argument voor Yes/No (Boolean) |
|
|
| BooleanWithWordsType | argument voor True/False (Boolean) |
|
|
| ColorArgumentType | argument voor Colors (voorbeeld :0 0 0 255) |
|
|
| HexArgumentType | argument voor Hex ( voorbeeld :404040) |
|
|
| UuidMemberArgumentType | argument voor Kingdom members. Geeft UUID van speler |
|
|
|
|
|
|
#### voorbeeld 1
|
|
|
|
```ts
|
|
public class MyCommand extends AbstractCommand {
|
|
public MyCommand() {
|
|
super("MyCommand");
|
|
setDescription("this command does nothing");
|
|
setLongDescription("This is just a demo. So don't get angry.. please...");
|
|
setPermission("demo.set");
|
|
setPlayerOnly(false);
|
|
}
|
|
|
|
@Override
|
|
public void createCommand(KingdomCommand command) {
|
|
|
|
command
|
|
.then(argument("kingdom", KingdomArgumentType.kingdom()) // [!code hl] //eerste argument van commando
|
|
.executes(c -> {
|
|
Kingdom kingdom = c.getArgument("kingdom", Kingdom.class); //[!code hl] //ophalen argument
|
|
|
|
... //do something
|
|
|
|
return Command.SINGLE_SUCCESS;
|
|
|
|
}));
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
#### voorbeeld 2
|
|
```ts
|
|
public class MyCommand extends AbstractCommand {
|
|
|
|
public MyCommand() {
|
|
super("MyCommand");
|
|
setDescription("this command does nothing");
|
|
setLongDescription("This is just a demo. So don't get angry.. please...");
|
|
setPermission("demo.set");
|
|
setPlayerOnly(false);
|
|
}
|
|
|
|
@Override
|
|
public void createCommand(KingdomCommand command) {
|
|
|
|
command
|
|
.then(argument("action", OptionCollectionArgumentType.get(Arrays.asList("enable", "disable", "status"))) // [!code hl]
|
|
.executes(c -> {
|
|
|
|
String action = c.getArgument("action", String.class); // [!code hl]
|
|
|
|
switch (action.toLowerCase()) { // [!code hl]
|
|
case "on": // [!code hl]
|
|
break; // [!code hl]
|
|
case "disable": // [!code hl]
|
|
break; // [!code hl]
|
|
case "status": // [!code hl]
|
|
break;// [!code hl]
|
|
}
|
|
|
|
return Command.SINGLE_SUCCESS;
|
|
|
|
}));
|
|
}
|
|
}
|
|
```
|
|
|
|
#### voorbeeld 3
|
|
|
|
De argument RankArgumentTypeType geeft standaard de ranken uit de groep `default`
|
|
Met 'suggests' kan een andere lijst worden gegeven.
|
|
|
|
In het onderstaande voorbeeld wordt de ranken opgehaald van de kingdom , waar de speler die het commando uitvoert, lid van is.
|
|
De speler moet een echte `speler` zijn en moet lid zijn van een kingdom om het commando te kunnen zien.
|
|
|
|
|
|
```ts
|
|
|
|
public class MyCommand extends AbstractCommand {
|
|
|
|
public MyCommand() {
|
|
super("MyCommand");
|
|
setDescription("this command does nothing");
|
|
setLongDescription("This is just a demo. So don't get angry.. please...");
|
|
setPermission("demo.set");
|
|
setPlayerOnly(false); // [!code hl] //controle van player-only doen we in het commando zelf.
|
|
}
|
|
|
|
//dit regelt de nieuwe suggestie van ranks // [!code hl]
|
|
private CompletableFuture<Suggestions> PlayerKingdomRank(CommandContext<CommandSource> suggestionsBuilder, SuggestionsBuilder builder) { // [!code hl]
|
|
KingdomPlayer player = suggestionsBuilder.getSource().asKingdomPlayerOrNull(); // [!code hl]
|
|
for (Rank rank : player.getKingdom().getRanksList()) { // [!code hl]
|
|
builder.suggest(rank.getName()); // [!code hl]
|
|
} // [!code hl]
|
|
return builder.buildFuture(); // [!code hl]
|
|
} // [!code hl]
|
|
|
|
@Override
|
|
public void createCommand(KingdomCommand command) {
|
|
command
|
|
.then(argument("rank", RankArgumentTypeType.get()) // [!code hl]
|
|
.requires(c -> c.isPlayer() && c.hasKingdom()) // [!code hl] //player-only && speler heeft kingdom
|
|
.suggests(this::PlayerKingdomRank) // [!code hl] //verwijst naar de nieuwe suggestie
|
|
.executes(c -> {
|
|
Rank rank = c.getArgument("rank",Rank.class);
|
|
|
|
... do something
|
|
|
|
return Command.SINGLE_SUCCESS;
|
|
|
|
}));
|
|
}
|
|
|
|
}
|
|
```
|
|
|
|
|
|
## Gegevens opslaan
|
|
|
|
In de plugin kan je gegevens opslaan die je op een andere server weer kan gebruiken.
|
|
|
|
Je hebt 3 plekken waar je data kan bewaren.
|
|
|
|
* spelers data
|
|
* kingdom data
|
|
* server data
|
|
|
|
De data kan je bewaren dmv MetaData
|
|
|
|
Voorbeeld kingdom data
|
|
```ts
|
|
Kingdom kingdom = Kingdom.get("MyKingdom");
|
|
|
|
MetaData md = new IntegerDataField("myplugin_key");//zorg dat je plugin naam er in zit ivm andere plugins
|
|
md.setValue(10);
|
|
|
|
kingdom.addMeta(md, (result, kd)-> {
|
|
//do something
|
|
});
|
|
```
|
|
|
|
Voorbeeld server data
|
|
```ts
|
|
Kingdom kingdom = Kingdom.get("MyKingdom");
|
|
|
|
MetaData md = new IntegerDataField("myplugin_key"); //zorg dat je plugin naam er in zit ivm andere plugins
|
|
md.setValue(10);
|
|
|
|
UltimateKingdom.Settings().addMeta(md, (result, kd)-> {
|
|
//do something
|
|
});
|
|
```
|
|
|
|
### Metadata objecten
|
|
|
|
Alleen serializable objects
|
|
|
|
| type |
|
|
| --------------------------- |
|
|
| BooleanDataField |
|
|
| DecimalDataField |
|
|
| IntegerDataField |
|
|
| LongDataField |
|
|
| ListDataFiend |
|
|
| HashMapStringBooleanField |
|
|
| HashMapStringIntegerField |
|
|
|
|
|
|
## Placeholders
|
|
|
|
|
|
### Kingdom/player object
|
|
|
|
De kingdom plugin gebruikt de onderstaande metadata labels.
|
|
|
|
| label | Type | object | omschrijving |
|
|
| ------------------------------ |:----------------: | :--------------:|------------------------------------------------ |
|
|
| strokeColor | String | kingdom | in gebruik bij setdynmap |
|
|
| strokeopacity | Double | kingdom | in gebruik bij setdynmap |
|
|
| strokeweight | Integer | kingdom | in gebruik bij setdynmap |
|
|
| fillcolor | String | kingdom | in gebruik bij setdynmap |
|
|
| fillopacity | Double | kingdom | in gebruik bij setdynmap |
|
|
| spawnicon | String | kingdom | in gebruik bij setdynmap |
|
|
| warpicon | String | kingdom | in gebruik bij setdynmap |
|
|
|
|
|
|
### Settings
|
|
|
|
De kingdom plugin gebruikt de onderstaande metadata settings labels.
|
|
|
|
| label | Type | omschrijving |
|
|
| ------------------------ | ------------- |------------------------------------------------ |
|
|
| ultimate_leavelocation | String | KingdomLocatie als String |
|
|
| ultimate_kicklocation | String | KingdomLocatie als String |
|
|
|
|
|
|
|
|
## Events
|
|
|
|
onderstaande is nog niet compleet.
|
|
|
|
### WorldGuard Events
|
|
|
|
| type | omschrijving |
|
|
| --------------------------- | --------------------------------------------------------------------- |
|
|
| RegionEnteredEvent | als een speler een regio binnen gaat |
|
|
| RegionLeftEvent | als een speler een regio verlaat |
|
|
| RegionsChangedEvent | als een speler van regio veranderd |
|
|
| RegionsLeftEvent | als een speler een regio verlaat. |
|
|
|
|
|
|
### GamePlay events
|
|
|
|
Alle gamePlay events waar je iets meer kan doen.
|
|
|
|
#### Action events
|
|
|
|
| type | omschrijving |
|
|
| --------------------------- | --------------------------------------------------------------------- |
|
|
| KingdomSwitchEvent | als een speler iets omzet zoals een schakelaar |
|
|
| KingdomItemuseEvent | als een speler een item gebruikt |
|
|
| KingdomDestroyEvent | als een speler iets kapot maakt |
|
|
| KingdomBuildEvent | als een speler iets bouwt |
|
|
| KingdomActionEvent | alles hierboven |
|
|
|
|
|
|
|
|
#### Damage events
|
|
|
|
| type | omschrijving |
|
|
| -------------------------------| --------------------------------------------------------------------- |
|
|
| KingdomPlayerDamagePlayerEvent | Speler tegen speler damage |
|
|
| KingdomDamageEvent | alles hier boven |
|
|
|
|
|
|
|
|
### Chat events
|
|
|
|
| type | omschrijving |
|
|
| ------------------------------- | --------------------------------------------------------------------- |
|
|
| AsyncNonReportableChatEvent | waneer een admin chat (nochatreport in config.yml moet aan staan) |
|
|
| AsyncPostNonReportableChatEvent | waneer een admin chat (nochatreport in config.yml moet aan staan) |
|
|
| KingdomChatEvent | wanneer eens speler chat
|
|
|
|
|
|
### Kingdom events
|
|
|
|
| type | omschrijving |
|
|
| ------------------------------- | -------------------------------------- |
|
|
| KingdomSetEvent | Speler in kingdom zetten |
|
|
| KingdomCreateEvent | kingdom aanmaken |
|
|
| KingdomDeleteEvent | kingdom verwijderen |
|
|
| KingdomRenameEvent | kingdom hernoemen |
|
|
| KingdomAddPointsEvent | toevoegen punten |
|
|
| KingdomAddSpawnEvent | toevoegen spawn |
|
|
| KingdomDeleteSpawnEvent | verwijderen spawn |
|
|
| KingdomAddWarpEvent | toevoegen warp |
|
|
| KingdomDeleteWarpEvent | verwijderen warp |
|
|
| KingdomMaxMembersEvent | instellen max. aantal leden |
|
|
| KingdomRemoveLevelEvent | verwijderen van level |
|
|
| KingdomRemoveMember | verwijderen van kingdom lid |
|
|
| KingdomRemovePointsEvent | verwijderen van punten |
|
|
| KingdomRemoveRankMaximumEvent | verwijderen van een rank max. |
|
|
| KingdomSetFriendlyFireEvent | instellen friendly-fire |
|
|
| KingdomSetInviteOnly | instellen invite-only |
|
|
| KingdomSetLevelEvent | instellen kingdom level |
|
|
| KingdomSetPlaceHolderEvent | instellen placeholder |
|
|
| KingdomSetRankMaximumEvent | instellen max rank |
|
|
| KingdomSetRelationEvent | instellen relatie |
|
|
| KingdomSetSpawnEvent | instellen spawn |
|
|
| KingdomSetWarpEvent | instellen warp |
|
|
| KingdomPlayerSetRank | instellen rank |
|
|
|
|
|
|
### Player events
|
|
|
|
| type |
|
|
| ------------------------------------ |
|
|
| PlayerJoinKingdomEvent |
|
|
| PlayerJoinServerEvent |
|
|
| PlayerDeathMessageEvent |
|
|
| PlayerKilledPlayerDeathMessageEvent |
|
|
| PlayerDeathMessageEvent |
|
|
|
|
|
|
### WorldGuardWrapper Events
|
|
|
|
| type |
|
|
| --------------------------- |
|
|
| WrappedUseEntityEvent |
|
|
| WrappedDisallowedPVPEvent |
|
|
| WrappedDamageEntityEvent |
|
|
| AbstractWrappedEvent |
|
|
|
|
|
|
|