From d2b99e567d53f0794dc24640b78ca6d3a2867cb0 Mon Sep 17 00:00:00 2001 From: Jishuna Date: Sat, 27 May 2023 10:45:49 +1000 Subject: [PATCH] #857: Add boolean PersistentDataType --- .../persistence/PersistentDataType.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/main/java/org/bukkit/persistence/PersistentDataType.java b/src/main/java/org/bukkit/persistence/PersistentDataType.java index 0af00a24..dc8e5c1d 100644 --- a/src/main/java/org/bukkit/persistence/PersistentDataType.java +++ b/src/main/java/org/bukkit/persistence/PersistentDataType.java @@ -55,6 +55,16 @@ public interface PersistentDataType { PersistentDataType FLOAT = new PrimitivePersistentDataType<>(Float.class); PersistentDataType DOUBLE = new PrimitivePersistentDataType<>(Double.class); + /* + Boolean. + */ + /** + * A convenience implementation to convert between Byte and Boolean as there is + * no native implementation for booleans.
+ * Any byte value > 0 is considered to be true. + */ + PersistentDataType BOOLEAN = new BooleanPersistentDataType(); + /* String. */ @@ -155,4 +165,36 @@ public interface PersistentDataType { return primitive; } } + + /** + * A convenience implementation to convert between Byte and Boolean as there is + * no native implementation for booleans.
+ * Any byte value > 0 is considered to be true. + */ + class BooleanPersistentDataType implements PersistentDataType { + + @NotNull + @Override + public Class getPrimitiveType() { + return byte.class; + } + + @NotNull + @Override + public Class getComplexType() { + return boolean.class; + } + + @NotNull + @Override + public Byte toPrimitive(@NotNull Boolean complex, @NotNull PersistentDataAdapterContext context) { + return (byte) (complex ? 1 : 0); + } + + @NotNull + @Override + public Boolean fromPrimitive(@NotNull Byte primitive, @NotNull PersistentDataAdapterContext context) { + return primitive != 0; + } + } }