-
Notifications
You must be signed in to change notification settings - Fork 43
Developing with LevelledMobs
This page was last updated for LevelledMobs 3.1.0 b475
Add the repository.
<repository>
<id>Central Sonatype</id>
<url>https://central.sonatype.com/</url>
</repository>
Add the LevelledMobs dependency.
<dependency>
<groupId>io.github.arcaneplugins</groupId>
<artifactId>LevelledMobs-plugin</artifactId>
<version>4.0.2</version>
</dependency>
Add the repository.
repositories {
maven("https://central.sonatype.com/")
}
Add the LevelledMobs dependency.
implementation("io.github.arcaneplugins:levelledmobs-plugin:4.0.2")
Replace REPLACE ME
with the latest version (not including build number!) of LevelledMobs, e.g. 3.1.0
.
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:
Java:
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
);
}
Kotlin:
fun getMobLevel(livingEntity: LivingEntity) : Int{
val levelledMobs = Bukkit.getPluginManager().getPlugin("LevelledMobs") ?: return 0
val levelKey = NamespacedKey(levelledMobs, "level")
return livingEntity.persistentDataContainer.get(levelKey, PersistentDataType.INTEGER) ?: 0
}
Java:
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);
}
}
Kotlin:
class LevelledMobsManager {
private val levelledMobsIsInstalled: Boolean?
private var key: NamespacedKey? = null
init {
val levelledMobsPlugin = Bukkit.getPluginManager().getPlugin("LevelledMobs")
levelledMobsIsInstalled = levelledMobsPlugin != null && levelledMobsPlugin.isEnabled
if (levelledMobsIsInstalled) {
key = NamespacedKey(levelledMobsPlugin!!, "level")
}
}
fun hasLevelledMobsInstalled(): Boolean {
return levelledMobsIsInstalled != null && levelledMobsIsInstalled
}
fun getLevelledMobsMobLevel(entity: Entity): Int {
if (!hasLevelledMobsInstalled()) return 0
return entity.persistentDataContainer.get(key!!, PersistentDataType.INTEGER) ?: 0
}
}
We offer the LevelInterface class to interact directly with LevelledMobs.
We also offer a bunch of events which you can listen to and modify.
You can prevent mobs from being levelled, run stuff after they have been levelled, and so on.
You may view the javadocs we have compiled so far.
These show our code documentation which we are gradually improving.
If you want to integrate your plugin directly into LM's custom drop system, we have an API for it. Sample code is below.
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");
}
If you need assistance in using LevelledMobs with your plugin, please contact us! :)
- π₯ Compatibilities
- π Installation
- π Commands
- π©ββοΈ Permissions
- πββοΈ Frequently Asked Questions
- π LevelledMobs 4.0 Wiki
- π§ Settings (settings.yml)
- π Rules (rules.yml)
- β Custom Drops (customdrops.yml)
- π¬ Messages (messages.yml)
- π Official Config Translations
- π Unofficial Config Translations