Package org.bukkit.persistence

# Interface PersistentDataType<T,Z>

Type Parameters:
  `T` - the primary object type that is stored in the given tag
  `Z` - the retrieved object type when applying this tag type

All Known Implementing Classes:
  `PersistentDataType.PrimitivePersistentDataType`

public interface PersistentDataType<T,Z>
This class represents an enum with a generic content type. It defines the types a custom tag can have.

This interface can be used to create your own custom `PersistentDataType` with different complex types. This may be useful for the likes of a UUIDTagType:

     public class UUIDTagType implements PersistentDataType<byte[], UUID> {

             {@literal @Override}
             public Class<byte[]> getPrimitiveType() {
                 return byte[].class;
             }

             {@literal @Override}
             public Class<UUID> getComplexType() {
                 return UUID.class;
             }

             {@literal @Override}
             public byte[] toPrimitive(UUID complex, PersistentDataAdapterContext context) {
                 ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
                 bb.putLong(complex.getMostSignificantBits());
                 bb.putLong(complex.getLeastSignificantBits());
                 return bb.array();
             }

             {@literal @Override}
             public UUID fromPrimitive(byte[] primitive, PersistentDataAdapterContext context) {
                 ByteBuffer bb = ByteBuffer.wrap(primitive);
                 long firstLong = bb.getLong();
                 long secondLong = bb.getLong();
                 return new UUID(firstLong, secondLong);
             }
         }

## Nested Class Summary

Nested Classes
Modifier and Type
Interface
Description
`static class`
`PersistentDataType.PrimitivePersistentDataType<T>`
A default implementation that simply exists to pass on the retrieved or inserted value to the next layer.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final PersistentDataType<Byte,Byte>`
`BYTE`
`static final PersistentDataType<byte[],byte[]>`
`BYTE_ARRAY`
`static final PersistentDataType<Double,Double>`
`DOUBLE`
`static final PersistentDataType<Float,Float>`
`FLOAT`
`static final PersistentDataType<Integer,Integer>`
`INTEGER`
`static final PersistentDataType<int[],int[]>`
`INTEGER_ARRAY`
`static final PersistentDataType<Long,Long>`
`LONG`
`static final PersistentDataType<long[],long[]>`
`LONG_ARRAY`
`static final PersistentDataType<Short,Short>`
`SHORT`
`static final PersistentDataType<String,String>`
`STRING`
`static final PersistentDataType<PersistentDataContainer,PersistentDataContainer>`
`TAG_CONTAINER`
`static final PersistentDataType<PersistentDataContainer[],PersistentDataContainer[]>`
`TAG_CONTAINER_ARRAY`

## Method Summary

Modifier and Type
Method
Description
`Z`
`fromPrimitive(T primitive, @NotNull PersistentDataAdapterContext context)`
Creates a complex object based of the passed primitive value
`@NotNull Class<Z>`
`getComplexType()`
Returns the complex object type the primitive value resembles.
`@NotNull Class<T>`
`getPrimitiveType()`
Returns the primitive data type of this tag.
`T`
`toPrimitive(Z complex, @NotNull PersistentDataAdapterContext context)`
Returns the primitive data that resembles the complex object passed to this method.

## Field Details

### BYTE

static final PersistentDataType<Byte,Byte> BYTE

### SHORT

static final PersistentDataType<Short,Short> SHORT

### INTEGER

static final PersistentDataType<Integer,Integer> INTEGER

### LONG

static final PersistentDataType<Long,Long> LONG

### FLOAT

static final PersistentDataType<Float,Float> FLOAT

### DOUBLE

static final PersistentDataType<Double,Double> DOUBLE

### STRING

static final PersistentDataType<String,String> STRING

### BYTE_ARRAY

static final PersistentDataType<byte[],byte[]> BYTE_ARRAY

### INTEGER_ARRAY

static final PersistentDataType<int[],int[]> INTEGER_ARRAY

### LONG_ARRAY

static final PersistentDataType<long[],long[]> LONG_ARRAY

### TAG_CONTAINER_ARRAY

static final PersistentDataType<PersistentDataContainer[],PersistentDataContainer[]> TAG_CONTAINER_ARRAY

### TAG_CONTAINER

static final PersistentDataType<PersistentDataContainer,PersistentDataContainer> TAG_CONTAINER

## Method Details

### getPrimitiveType

@NotNull @NotNull Class<T> getPrimitiveType()
Returns the primitive data type of this tag.

Returns:
  the class

### getComplexType

@NotNull @NotNull Class<Z> getComplexType()
Returns the complex object type the primitive value resembles.

Returns:
  the class type

### toPrimitive

@NotNull T toPrimitive(@NotNull Z complex, @NotNull @NotNull PersistentDataAdapterContext context)
Returns the primitive data that resembles the complex object passed to this method.

Parameters:
  `complex` - the complex object instance
  `context` - the context this operation is running in
Returns:
  the primitive value

### fromPrimitive

@NotNull Z fromPrimitive(@NotNull T primitive, @NotNull @NotNull PersistentDataAdapterContext context)
Creates a complex object based of the passed primitive value

Parameters:
  `primitive` - the primitive value
  `context` - the context this operation is running in
Returns:
  the complex object instance