--- 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 .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 PlayerKingdomRank(CommandContext 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 |