Async All in one Lib 1.0-SNAPSHOT

Asynchronous API and Utils implementations for your Plugin. | AIO-API

  1. WoobbleDEV
    Tested Minecraft Versions:
    • 1.8
    • 1.9
    • 1.10
    • 1.11
    • 1.12
    This is an asynchronous implementation of common plugin APIs and Utils.

    The Lib is in developement an many features are added in the futures.
    Please report bugs in the comment section.

    Bundled API and Utils included:
    • Asynchronous SQLClient
    • Full Asynchronous Mojang-API wrapper with UUIDFetcher, NameFetcher, ProfileFetcher ...
    • ItemBuilder
    • Skulls with textures
    • Player Actionbar
    • CoinAPI (File- or SQLBased)
    • EffectAPI for Particles (not completed) and Named Sound Effetcs
    • A full Asynchronous NickAPI for changing player name and skin (also for the player himself)
    • Utils to perform Asynchronous actions Synchronous if needed.
    Plans for the future:
    • Base for Gamemodes to easify and speed up progress of development
    • InventoryAPI to easify work with different types of GUIs
    • AND much more (coming soon)

    HOW-TO
    Handler and AsyncResult
    As this is an Async Lib it uses AsyncResults.
    An AsyncResult is like a Future but with better Methods.
    The result of an method will be handled in Handler, which retrieved the result asynchronous, if an error appears the AsyncResult will give back
    an Throwable.
    The example shows the retrieving of an SQLConnection
    Code (Java):

    client.getConnection(res -> {
        //checks result is success or not
        if(res.succeed()) {
            //get the sql connection from the AsyncResult
            SQLConnection conn = res.result();
        }else{
            //print error if fails
            res.cause().printStackTrace();
        }
    });
     

    SQLClient
    Code (Java):

    SQLClient client = JDBCClient.create(datasource);
    /** Here you have to specifiy an datasource to point to your jdbc
    implementation (mysql/sqlite/..). The best way to implement this is to use
    HikariCP, which is the most recommend and fastest jdbc connection pool.
    The second point is that you have to add your sql driver to the classpath.
    (like 'MySQL Connector/J') */


    //To get started you need to get a SQLConnection

    client.getConnection(res -> {
        if(res.succeed()) {
            SQLConnection conn = res.result();
           
            //As we have the connection now, we can use it to update, query...
            //the database

           
            conn.update("INSERT INTO `test` VALUES ('1234', 'ITS A TEST')", res2 -> {
                if(res2.failed()) {
                    //print error if fails
                    res2.cause().printStackTrace();
                }
             });

        }else{
            res.cause().printStackTrace();
        }
    });

    //Don't forget to close the SQLClient if the server stops!
    client.close();

    Sync
    Works for every asynchronous Method call, but will block the thread
    Code (Java):

    SQLConnection conn = Sync.awaitResult(h -> client.getConnection(h));
     

    Mojang
    Full MojangAPI wrapper
    Code (Java):

    //create instance of api
    Mojang mojang = Mojang.create();

    //get players profile
    mojang.getProfile(...);
    //get uuid for name
    mojang.getUUID(..);
    //get all blocked server
    mojang.getBlockedServer();
    //get name for uuid
    mojang.getName(..);
    //get players name history
    mojang.getNameHistory(..);
    //get status of all mojang/minecraft server
    mojang.getStatus(..);
    //get status of mojang/minecraft server
    mojang.getStatusOf(...);
    //get uuid at time
    mojang.getUUIDAt(...);

    //close mojangapi
    mojang.close();
     

    ItemBuilder
    Build items and their ItemMeta

    Code (Java):


    //Build items and their ItemMeta
    ItemStack item = ItemBuilder.newBuilder()
            .setMaterial(Material.DIAMOND_SWORD)
            .setItemMeta(ItemMetaBuilder.newBuilder()
                    .setDisplayName("&cDisplay")
                    .build())
            .build();

     

    SkullAPI
    Create skull form URL or profile

    Code (Java):

    //create instance of api
    SkullAPI skullAPI = SkullAPI.create();

    //get skull with textures as itemstack
    skullAPI.getSkull("URL", res -> {
        if(res.succeed()) {
            ItemStack skull = res.result();
        }
    });

    //close api
    skullAPI.close();

     

    Actiobar
    Code (Java):

    //create instance of Actionbar
    Actionbar actionbar = Actionbar.create();

    //send actiobar to player(s). You also can send Actionbar laters and at Fixed rate
    actionbar.sendActionbar(player, msg, handler);

    //close api
    actionbar.close();
     
    CoinAPI
    Code (Java):


    //create instance of api
    CoinAPI coinAPI = CoinAPI.create();

    //get players coins
    coinAPI.getCoins(..);
    //set players coins
    coinAPI.setCoins(..);
    //add player coins
    coinAPI.addCoins(..);
    //remove player coins
    coinAPI.removeCoins(..);

    //close api
    coinAPI.close();

     
    NickAPI
    Code (Java):

    //create instance of api. MojangAPI is needed
    NickAPI nickAPI = NickAPI.create(mojang);

    //get nick from name/uuid/gameprofile
    nickAPI.getNick(..);
    //get players real name
    nickAPI.getRealName(..);
    //nick player with nick (getNick(..))
    nickAPI.nickPlayer(..);
    //reset player
    nickAPI.resetPlayer(..);
    //check wheather player is nicked
    nickAPI.hasNick(..);

    //close nickapi
    nickAPI.close();
     
    EffectAPI
    Code (Java):

    //create instance of api
    EffectAPI effectAPI = EffectAPI.create();

    //play named sound effect
    effectAPI.playNamedSound(..);

    //close api
    effectAPI.close();
     
    MAVEN
    Code (Text):

    <repository>
       <id>syst3m.run repo</id>
       <url>https://repo.syst3m.run/repository/maven-snapshots/</url>
    </repository>


    <dependency>
      <groupId>run.syst3m</groupId>
      <artifactId>allinone</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>[/SIZE]