Skip to content

# API ​

## 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
- WorldGuardWrapper
- xseries
- Okaeri Placeholders
- okaeri-tasker [1]
- Scoreboard-library
- Universal Scheduler
- Simple-Yaml

### 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
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()) //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")))
                            .executes(c -> {

                                String action = c.getArgument("action", String.class);

                                switch (action.toLowerCase()) {
                                    case "on":
                                         break;
                                    case "disable":
                                        break;
                                    case "status":
                                        break;
                                }

                                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);  //controle van player-only doen we in het commando zelf.
        }

        //dit regelt de nieuwe suggestie van ranks
        private CompletableFuture<Suggestions> PlayerKingdomRank(CommandContext<CommandSource> suggestionsBuilder, SuggestionsBuilder builder) {
            KingdomPlayer player = suggestionsBuilder.getSource().asKingdomPlayerOrNull();
             for (Rank rank : player.getKingdom().getRanksList()) {
              builder.suggest(rank.getName());
             }
            return builder.buildFuture();
        }

        @Override
        public void createCommand(KingdomCommand command) {
            command
                    .then(argument("rank", RankArgumentTypeType.get())
                            .requires(c -> c.isPlayer() && c.hasKingdom()) //player-only && speler heeft kingdom
                            .suggests(this::PlayerKingdomRank) //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

1. Er zit een aangepaste variant in de plugin, voor ondersteuning van de Universal scheduler. (UniversalTasker) ↩︎