ζetaCore icon

ζetaCore -----

A core API for a bunch of plugins I develop



A core API that adds many features to make developing gui-based plugins easier. ZetaCore also acts as a management plugin for all plugins using it (That also extend the ZetaPlugin class.) It includes features for easily managing config files as well as easily add your config options to a database. There are also many utilities and helper classes to create gui menus and develop intricate commands for your plugin.

Config, config, and more config!

All about data and storing it.

Basic data storer
This uses a yml file to store data and has no database relation.
Code (Java):
public class MyDataHandler extends DataStorer {

  private boolean someOption ;
  private String nameOfSomething ;
 
  public MyDataHandler (ZetaPlugin plugin ) {
    super (plugin, "file_name" ) ;
  }
 
  @Override
  public void write ( ) {
    this. config. set ( "someOption", someOption ) ;
    this. config. set ( "name", nameOfSomething ) ;
 
    this. save ( ) ; // Important, actually writes to file.
  }
 
  @Override
  public void read ( ) {
    this. someOption = this. config. getBoolean ( "someOption" ) ;
    this. nameOfSomething = this. config. getString ( "name" ) ;
  }
 
  @Override
  public void setDefualts ( ) {
    if ( ! this. config. contains ( "someOption" ) {
      this. config. set ( "someOption", someOption ) ;
    }
    if ( ! this. config. contains ( "name" ) {
      this. config. set ( "name", nameOfSomething ) ;
    }
 
    // After defaults are set the read method is called.
  }
}
Adding SQL Support
Now you will have your data stored in an SQL database and a local file. This ensures that if the database is ever down you still have the correct data.
We'll build off of the previous example. (Although that isn't a very practical example it still works to get the gist)
Code (Java):
public class MyDataHandler extends AbstractUntypedSQLDataStorer <Integer > /* The generic specifies the type of the primary key */ {
  // UntypedSQLDataStorer indicates there is no associated object.
 
  public MyDataHandler (ZetaPlugin plugin ) {
    super (plugin, "file_name", "table_name" ) ;
  }
 
  // You have a few new methods to implement.
  @Override
      public List <SQLColumn <?>> getColumns (SQLHandler handler ) {
    // In most cases you will likely not have to use the SQLHandler
    List <SQLColumn <?>> columns = new ArrayList <> ( ) ;
    columns. add ( new SQLInteger ( "ID", table, /* Reference to this table */ 1, ColumnSettings. PRIMARY_KEY /* Specifies this column as the primary key. Other options available using ColumnSettings.Builder */ ) ;
    columns. add ( new SQLVarChar ( "NAME", table, 16 ) ;
    columns. add ( new SQLBool ( "SOME_BOOLEAN", table ) ;
    return columns ;
  }
 
  @Override
  public void readDB ( ) {
    RowList rows = this. table. getRows ( ) ;
 
    this. someOption = rows. getFirstValue ( "ID", 0, "SOME_BOOLEAN" ). getBoolean ( ) ; // Gets the first row and then gets the boolean under the key of `SOME_BOOLEAN`
    this. nameOfSomething = rows. getFirstValue ( "ID", 0, "NAME" ). getString ( ) ; // Gets the first row and then gets the string under the key of `NAME`
  }
 
  @Override
  public void writeDB ( ) {
    this. table. writeValue ( 0, /* Id */ nameOfSomething, this. someOption ) ;
    /*
    * Using this method you must input your objects in the order that you specified in your getColumns method
    * Also when writing to the database (outside of this method) you will need to either call table.commit() or writeToDB()
    * Because for performance I use batches of SQL statements rather than sending them individually
    */

  }
 
  @Override
  public String getPrimaryKey ( ) {
    return "ID" ;
  }
}
Initializing these data storers and Initializing a ZetaPlugin
This has to be done in your main class (And that class has to extend ZetaPlugin)
This example assumes you implemented you data handler with SQL.
Code (Java):
public class MyPlugin extends ZetaPlugin { // Already extends JavaPlugin, so all is well
  private MyDataHandler dataHandler ;
  private boolean dataRead ;
 
  @Override
  public void onEnable ( ) {
    // Register any events that DON'T require your data.
    super. onEnable ( ) ;
  }
 
 
  @Override
  public String getPluginName ( ) {
      return "MyPlugin" ;
  }
 
  @Override
  protected void registerDataStorers ( ) {
    dataHandler = new MyDataHandler ( this ) ;
    dataHandler. setup ( ) ;
  }
 
  // Data is read asynchronously so this method is run after data has been read
  @Override
  public void onDataReadFinish ( ) {
    this. dataRead = true ;
    // Register any events that require your data
  }
 
  @Override
  public boolean initializedFinished ( ) {
    return dataRead ;
  }
 
  @Override
  public ItemStack getIcon ( ) {
    return new ItemStack (Material. COMMAND_BLOCK ) ;
  }
}
This example also shows how you would set up a ZetaPlugin in the first place. The getIcon method is used to get the item displayed when in the menu for managing various plugins.

Menus

ZetaCore has features to allow you to easily create gui menus
Simple Menu
This is a simple example of how to create a GUI using ZetaCore. This example uses ZetaCore's AbstractGUIMenu class to implement a simple GUI as well as that class's methods to easily create items and add them to the GUI. This will create a menu where the player can click on items to get them. The menu will have 54 slots and will be titled "Test Menu" with a gold coloring. There is also a secret feature where if you click a specific slot, you will get a secret diamond.
Code (Java):
public class SimpleMenu extends AbstractGUIMenu {

    public SimpleMenu (PlayerUtil menuUtil ) {
        super (menuUtil, "&6Test Menu", 54 ) ; // Supports formatting codes
    }

    @Override
    public void setItems ( ) {
        // Set items here
        this. inv. setItem ( 0, makeItem (Material. DIAMOND, "&bDiamond" ) ) ;
        this. inv. setItem ( 1, makeItem (Material. GOLD_INGOT, "&6Gold" ) ) ;
        this. inv. setItem ( 2, makeItem (Material. IRON_INGOT, "&fIron" ) ) ;
        this. inv. setItem ( 3, makeItem (Material. COAL, "&8Coal" ) ) ;
        this. inv. setItem ( 4, makeItem (Material. REDSTONE, "&cRedstone" ) ) ;
        this. inv. setItem ( 5, makeItem (Material. BARRIER, "&cBarrier", "&7Click me to get a barrier" ) ) ; // Supports lore and formatting codes
    }

    @Override
    public void handleClick (InventoryClickEvent e ) {
        // Handle clicks here
        // If the player clicks on an item, this method will be called
        switch (e. getSlot ( ) ) {
            case 0 :
                this. owner. getInventory ( ). addItem (makeItem (Material. DIAMOND, "&bDiamond" ) ) ;
                break ;
            case 1 :
                this. owner. getInventory ( ). addItem (makeItem (Material. GOLD_INGOT, "&6Gold" ) ) ;
                break ;
            case 2 :
                this. owner. getInventory ( ). addItem (makeItem (Material. IRON_INGOT, "&fIron" ) ) ;
                break ;
            case 3 :
                this. owner. getInventory ( ). addItem (makeItem (Material. COAL, "&8Coal" ) ) ;
                break ;
            case 4 :
                this. owner. getInventory ( ). addItem (makeItem (Material. REDSTONE, "&cRedstone" ) ) ;
                break ;
            case 5 :
                this. owner. getInventory ( ). addItem (makeItem (Material. BARRIER, "&cBarrier" ) ) ;
                break ;
        }
    }

    @Override
    public void handleClickAnywhere (InventoryClickEvent e ) {
        // However, if you want to handle clicks anywhere in the inventory, use this method
        super. handleClickAnywhere (e ) ;
        if (e. getSlot ( ) == 12 ) {
            this. owner. getInventory ( ). addItem (makeItem (Material. DIAMOND, "&4Secret Diamond" ) ) ;
        }
    }
}
Resource Information
Author:
----------
Total Downloads: 307
First Release: Jan 17, 2023
Last Update: Feb 16, 2023
Category: ---------------
All-Time Rating:
0 ratings
Find more info at yeetmanlord.github.io...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings