diff --git a/src/main/java/com/tiedup/remake/v2/bondage/component/ComponentType.java b/src/main/java/com/tiedup/remake/v2/bondage/component/ComponentType.java new file mode 100644 index 0000000..7a26186 --- /dev/null +++ b/src/main/java/com/tiedup/remake/v2/bondage/component/ComponentType.java @@ -0,0 +1,38 @@ +package com.tiedup.remake.v2.bondage.component; + +import com.google.gson.JsonObject; +import java.util.function.Function; +import org.jetbrains.annotations.Nullable; + +public enum ComponentType { + LOCKABLE("lockable", LockableComponent::fromJson), + RESISTANCE("resistance", ResistanceComponent::fromJson), + GAGGING("gagging", GaggingComponent::fromJson); + + private final String jsonKey; + private final Function factory; + + ComponentType( + String jsonKey, + Function factory + ) { + this.jsonKey = jsonKey; + this.factory = factory; + } + + public String getJsonKey() { + return jsonKey; + } + + public IItemComponent create(JsonObject config) { + return factory.apply(config); + } + + @Nullable + public static ComponentType fromKey(String key) { + for (ComponentType type : values()) { + if (type.jsonKey.equals(key)) return type; + } + return null; + } +} diff --git a/src/main/java/com/tiedup/remake/v2/bondage/component/GaggingComponent.java b/src/main/java/com/tiedup/remake/v2/bondage/component/GaggingComponent.java new file mode 100644 index 0000000..cb434f1 --- /dev/null +++ b/src/main/java/com/tiedup/remake/v2/bondage/component/GaggingComponent.java @@ -0,0 +1,12 @@ +package com.tiedup.remake.v2.bondage.component; + +import com.google.gson.JsonObject; + +public class GaggingComponent implements IItemComponent { + + private GaggingComponent() {} + + public static IItemComponent fromJson(JsonObject config) { + return new GaggingComponent(); + } +} diff --git a/src/main/java/com/tiedup/remake/v2/bondage/component/LockableComponent.java b/src/main/java/com/tiedup/remake/v2/bondage/component/LockableComponent.java new file mode 100644 index 0000000..4c383d3 --- /dev/null +++ b/src/main/java/com/tiedup/remake/v2/bondage/component/LockableComponent.java @@ -0,0 +1,12 @@ +package com.tiedup.remake.v2.bondage.component; + +import com.google.gson.JsonObject; + +public class LockableComponent implements IItemComponent { + + private LockableComponent() {} + + public static IItemComponent fromJson(JsonObject config) { + return new LockableComponent(); + } +} diff --git a/src/main/java/com/tiedup/remake/v2/bondage/component/ResistanceComponent.java b/src/main/java/com/tiedup/remake/v2/bondage/component/ResistanceComponent.java new file mode 100644 index 0000000..ab8f741 --- /dev/null +++ b/src/main/java/com/tiedup/remake/v2/bondage/component/ResistanceComponent.java @@ -0,0 +1,12 @@ +package com.tiedup.remake.v2.bondage.component; + +import com.google.gson.JsonObject; + +public class ResistanceComponent implements IItemComponent { + + private ResistanceComponent() {} + + public static IItemComponent fromJson(JsonObject config) { + return new ResistanceComponent(); + } +}