A shaded library for Slimefun addons which adds a bunch of useful classes and utilities.
Actually, there is almost no difference. However, the implementation of the SlimefunAddon class is separated from the AbstractAddon class. This will be very useful for plugins that want to use InfinityLib without having to call the Slimefun API class. This way, we can place Slimefun in a soft-depend position in the Bukkit configuration file plugin.yml.
AbstractAddon: An implementation of JavaPlugin which you will need to extend for many of the other features to work. It provides multiple utility methods and does some basic setup for you.
AddonConfig: is an implementation of YamlConfiguration which makes comments available in the user's config and provides utility methods such as getting a value from within a range and removing unused/old keys from the user's config.
CoolDowns: A utility object for keeping track of cool downs of players/uuids
PersistentType: Contains some PersistentDataTypes for ItemStack's, ItemStack Array's, Locations, and String Arrays. Also provides a constructor for PersistentDataType that uses lambda parameters.
Events: Contains static utility methods for registering listeners, creating handlers, and calling events
Scheduler: Contains static utility methods for running and repeating tasks
AddonCommand: allows you to add commands easily with a parent-child structure, so you could have a command with a sub command which has a sub command. It also adds some default commands such as an addon info, aliases, and help command.
MultiGroup: An implementation of ItemGroup which lets you organize your groups into SubGroups
SubGroup: An ItemGroup that is hidden from the main page, for use in MultiGroup
MenuBlock: A SlimefunItem with a menu, providing overridable methods for setting up the menu
TickingMenuBlock: A MenuBlock with slimefun ticker
AbstractMachineBlock: A TickingMenuBlock which implements EnergyNetComponent and provides a process method
MachineBlock: An AbstractMachineBlock which makes it easy to create simple input-output machines
Translation Utility: Some sort of easy way to create translatable strings for your addon's and infinitylibs's strings
InfinityLib Metrics: Metrics to see which versions or even classes are being used
First you need to add InfinityLib (Standalone Edition) to the dependencies
section in your pom.xml
:
<dependency>
<groupId>com.github.ARVIN3108</groupId>
<artifactId>InfinityLib-Standalone</artifactId>
<version>SPECIFY VERSION HERE</version>
</dependency>
Then you need to relocate it into your own package so that it doesn't conflict with other addon's classes.
Under the build
section in your pom.xml
, you should have the following:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<configuration>
<!-- This will exclude any unused classes from libraries to reduce file size, not required -->
<minimizeJar>true</minimizeJar>
<relocations>
<!-- This is the relocation, make sure to replace the package name, REQUIRED -->
<relocation>
<pattern>io.github.mooy1.infinitylib</pattern>
<shadedPattern>YOUR.MAIN.PACKAGE.HERE.infinitylib</shadedPattern>
</relocation>
<relocation>id.arvin3108.standalone</relocation>
<shadedPattern>YOUR.MAIN.PACKAGE.HERE.standalone</shadedPattern>
</relocations>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
Then change your main plugin class to extend AbstractAddon
and implement the constructor.
You will need to use enable()
and disable()
instead of onEnable()
and onDisable
.
Make sure you don't call super.onEnable/Disable
.
Your updater and config setup is now handled, make sure to test that it's working though!