@EventHandler public void onEntityTameEvent(EntityTameEvent event) { /* Get the entity being tamed. */ LivingEntity entity = event.getEntity(); if (StackUtils.hasRequiredData(entity)) { /* Get the new quantity. Current size, less one (One being tamed) */ int newQuantity = StackUtils.getStackSize(entity) - 1; /* Clear the name of the entity that was just tamed. */ entity.setCustomName(""); /* If there are any mobs remaining in the stack, then peel em off to form a new stack. */ if (newQuantity > 0) { LivingEntity newEntity = getPlugin().getStackUtils().peelOffStack(entity, false); /* If there was an age in question, then assign it. */ if (newEntity instanceof Ageable) { ((Ageable) newEntity).setAge(((Ageable) event.getEntity()).getAge()); } /* * Yes I know the following aren't possible, but if someone uses a plugin that allows for taming of other mobs through NMS, * then this will account for that. */ /* If the stack had a colour, assign it. */ if (newEntity instanceof Colorable) { ((Colorable) newEntity).setColor(((Colorable) event.getEntity()).getColor()); } /* If it was a sheep, keep it's sheared status. */ if (newEntity instanceof Sheep) { ((Sheep) newEntity).setSheared(((Sheep) event.getEntity()).isSheared()); } } } }
@EventHandler public void interactEvent(PlayerInteractEntityEvent event) { /* If a LivingEntity was right clicked with a name tag, and stack custom named mobs is false, then follow. */ if (!getPlugin().getConfig().getBoolean("stack-custom-named-mobs") && event.getPlayer().getItemInHand().getType() == Material.NAME_TAG && event.getRightClicked() instanceof LivingEntity) { LivingEntity entity = (LivingEntity) event.getRightClicked(); ; /* Initialised blank name tag to get default name if it changes in future updates. */ ItemStack normalNameTag = new ItemStack(Material.NAME_TAG, 1, (byte) 0); /* Get the item the player is holding. */ ItemStack itemInHand = event.getPlayer().getItemInHand(); /* If the creature has the required data and the name tag isn't blank, then follow. */ if (StackUtils.hasRequiredData(entity) && !itemInHand .getItemMeta() .getDisplayName() .equalsIgnoreCase(normalNameTag.getItemMeta().getDisplayName())) { /* If there is more than one creature in the stack, then peel one off and don't allow it to stack again. */ if (StackUtils.getStackSize(entity) > 1) { getPlugin().getStackUtils().peelOffStack(entity, false); } else { entity.removeMetadata("quantity", getPlugin()); } } } }