public DataMutateResult setNode(DataType dataType, Node node, boolean callEvent) {
        if (hasNode(dataType, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME) != Tristate.UNDEFINED) {
            return DataMutateResult.FAIL_ALREADY_HAS;
        }

        Difference<Node> changes = getData(dataType).add(node);
        invalidateCache();
        if (callEvent) {
            this.plugin.getEventDispatcher().dispatchNodeChanges(this, dataType, changes);
        }

        return DataMutateResult.SUCCESS;
    }
Removes temporary permissions that have expired

@return true if permissions had expired and were removed
common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java