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

Hooks

De onderstaande hooks/bibliotheren zijn beschikbaar.

bibliotheken/hooksvia
Scoreboard-libraryUltimateKingdom.getKingdomServer().ScoreboardLibrary()
Kyori AdventureUltimateKingdom.getKingdomServer().Adventurehook()
Okaeri PlaceholdersUltimateKingdom.getKingdomServer().Messages().getPlaceHolders()
EssentialXUltimateKingdom.getKingdomServer().EssentialsHook()
Universal SchedulerUltimateKingdom.getKingdomServer().UniversalScheduler()
Okaeri-taskerUltimateKingdom.getKingdomServer().Tasker()
Teleport queueUltimateKingdom.getKingdomServer().QueuedTeleports()
Runnable queueUltimateKingdom.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.

typeomschrijving
KingdomArgumentTypeargument voor kingdoms (Kingdom)
KingdomPlayerArgumentTypeargument voor online spelers (KingdomPlayer)
ServerSpawnArgumentTypeargument voor server spawns (KingdomLocation)
ServerSpawnArgumentTypeargument voor rank groep (String)
PlayerLevelArgumentTypeargument voor player levels (KingdomLevel)
KingdomLevelArgumentTypeargument voor kingdom levels (PlayerLevel)
ChatChannelArgumentTypeargument voor channels (Channels)
CommandsArgumentTypeargument voor commands (AbstractCommand)
PlayerArgumentTypeargument voor online spelers (lokaal Players)
MultiServerCachedPlayerTypeargument voor online spelers (CachedPlayers)
RankArgumentTypeTypeargument voor Rank (Rank) zie voorbeeld 3
YesNoArgumentsTypeargument voor Yes/No (Boolean)
BooleanWithWordsTypeargument voor True/False (Boolean)
ColorArgumentTypeargument voor Colors (voorbeeld :0 0 0 255)
HexArgumentTypeargument voor Hex ( voorbeeld :404040)
UuidMemberArgumentTypeargument 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.

labelTypeobjectomschrijving
strokeColorStringkingdomin gebruik bij setdynmap
strokeopacityDoublekingdomin gebruik bij setdynmap
strokeweightIntegerkingdomin gebruik bij setdynmap
fillcolorStringkingdomin gebruik bij setdynmap
fillopacityDoublekingdomin gebruik bij setdynmap
spawniconStringkingdomin gebruik bij setdynmap
warpiconStringkingdomin gebruik bij setdynmap

Settings

De kingdom plugin gebruikt de onderstaande metadata settings labels.

labelTypeomschrijving
ultimate_leavelocationStringKingdomLocatie als String
ultimate_kicklocationStringKingdomLocatie als String

Events

onderstaande is nog niet compleet.

WorldGuard Events

typeomschrijving
RegionEnteredEventals een speler een regio binnen gaat
RegionLeftEventals een speler een regio verlaat
RegionsChangedEventals een speler van regio veranderd
RegionsLeftEventals een speler een regio verlaat.

GamePlay events

Alle gamePlay events waar je iets meer kan doen.

Action events

typeomschrijving
KingdomSwitchEventals een speler iets omzet zoals een schakelaar
KingdomItemuseEventals een speler een item gebruikt
KingdomDestroyEventals een speler iets kapot maakt
KingdomBuildEventals een speler iets bouwt
KingdomActionEventalles hierboven

Damage events

typeomschrijving
KingdomPlayerDamagePlayerEventSpeler tegen speler damage
KingdomDamageEventalles hier boven

Chat events

typeomschrijving
AsyncNonReportableChatEventwaneer een admin chat (nochatreport in config.yml moet aan staan)
AsyncPostNonReportableChatEventwaneer een admin chat (nochatreport in config.yml moet aan staan)
KingdomChatEventwanneer eens speler chat

Kingdom events

typeomschrijving
KingdomSetEventSpeler in kingdom zetten
KingdomCreateEventkingdom aanmaken
KingdomDeleteEventkingdom verwijderen
KingdomRenameEventkingdom hernoemen
KingdomAddPointsEventtoevoegen punten
KingdomAddSpawnEventtoevoegen spawn
KingdomDeleteSpawnEventverwijderen spawn
KingdomAddWarpEventtoevoegen warp
KingdomDeleteWarpEventverwijderen warp
KingdomMaxMembersEventinstellen max. aantal leden
KingdomRemoveLevelEventverwijderen van level
KingdomRemoveMemberverwijderen van kingdom lid
KingdomRemovePointsEventverwijderen van punten
KingdomRemoveRankMaximumEventverwijderen van een rank max.
KingdomSetFriendlyFireEventinstellen friendly-fire
KingdomSetInviteOnlyinstellen invite-only
KingdomSetLevelEventinstellen kingdom level
KingdomSetPlaceHolderEventinstellen placeholder
KingdomSetRankMaximumEventinstellen max rank
KingdomSetRelationEventinstellen relatie
KingdomSetSpawnEventinstellen spawn
KingdomSetWarpEventinstellen warp
KingdomPlayerSetRankinstellen 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) ↩︎

UltimateKingdom.nl