⚙️For Developers
For assistance, please visit the support discord.
Direct Links to Sonatype and the Maven Repositories https://central.sonatype.com/artifact/io.github.arcaneplugins/levelledmobs-plugin https://mvnrepository.com/artifact/io.github.arcaneplugins/levelledmobs-plugin
Maven
1] Add the Repository:
<repository>
<id>Central Sonatype</id>
<url>https://central.sonatype.com/</url>
</repository>
2] Add the LevelledMobs dependency:
<dependency>
<groupId>io.github.arcaneplugins</groupId>
<artifactId>LevelledMobs-plugin</artifactId>
<version>X.X.X</version>
</dependency>
** Make sure to replace X.X.X
with the latest version of LevelledMobs, as referenced here.
Access the LevelledMobs processing
The LevelInterface class provides core information;
Multiple events which can be listened to and modified with ease;
A populated Javadocs with basic documentation;
Obtaining the Level of a Mob without using the API
Mob levels are stored in the Persistent Data Container (PDC). You can obtain the level without using the LevelledMobs API by using code similar this:
Simplified Solution
public int getMobLevel(LivingEntity livingEntity){
Plugin levelledMobsPlugin = Bukkit.getPluginManager().getPlugin("LevelledMobs");
if (levelledMobsPlugin == null) return 0;
NamespacedKey levelKey = new NamespacedKey(levelledMobsPlugin, "level");
return Objects.requireNonNullElse(
livingEntity.getPersistentDataContainer().get(levelKey, PersistentDataType.INTEGER),
0
);
}
Elegant Solution
public class LevelledMobsManager {
private final Boolean levelledMobsIsInstalled;
private NamespacedKey key;
public LevelledMobsManager(){
Plugin levelledMobsPlugin = Bukkit.getPluginManager().getPlugin("LevelledMobs");
levelledMobsIsInstalled = levelledMobsPlugin != null && levelledMobsPlugin.isEnabled();
if (levelledMobsIsInstalled){
key = new NamespacedKey(levelledMobsPlugin, "level");
}
}
public boolean hasLevelledMobsInstalled(){
return levelledMobsIsInstalled != null && levelledMobsIsInstalled;
}
public int getLevelledMobsMobLevel(Entity entity){
if (!hasLevelledMobsInstalled()) return 0;
Integer mobLevel = entity.getPersistentDataContainer().get(key, PersistentDataType.INTEGER);
return Objects.requireNonNullElse(mobLevel, 0);
}
}
Integrating into CustomDrops Sample
Below is a sample bit of code which uses the CustomDrops system of LevelledMobs via the API
private void testCustomDrops(){
ItemStack itemStack = new ItemStack(Material.NETHERITE_SWORD);
ItemMeta meta = itemStack.getItemMeta();
assert meta != null;
meta.setDisplayName("Cool Netherite Sword");
meta.setLore(List.of("Created via API"));
itemStack.setItemMeta(meta);
// https://arcaneplugins.github.io/LevelledMobs/3.9.3/me/lokka30/levelledmobs/LevelledMobs.html
LevelledMobs lm = LevelledMobs.getInstance();
// https://arcaneplugins.github.io/LevelledMobs/3.9.3/me/lokka30/levelledmobs/customdrops/CustomDropItem.html
CustomDropItem customDropItem = new CustomDropItem(lm); // must pass instance to LevelledMobs main class
customDropItem.setItemStack(itemStack);
// these options correspond to many of the item specific options shown here:
// https://github.com/ArcanePlugins/LevelledMobs/wiki/Documentation---customdrops.yml
customDropItem.chance = 1.0F;
customDropItem.equippedSpawnChance = 1.0F;
// https://arcaneplugins.github.io/LevelledMobs/3.9.3/me/lokka30/levelledmobs/customdrops/CustomDropInstance.html
final CustomDropInstance customDropInstance = new CustomDropInstance(EntityType.ZOMBIE);
customDropInstance.customItems.add(customDropItem);
// mob specific options can be set on customDropInstance
lm.customDropsHandler.externalCustomDrops.addCustomDrop(customDropInstance);
// the drop is now registered just as if it were in customdrops.yml
main.getLogger().info("Added a new drop for zombie");
}
Last updated