diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/ErrorReport.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java similarity index 96% rename from src/main/java/me/mrCookieSlime/Slimefun/api/ErrorReport.java rename to src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java index eaa76a5a3..c21a7bd7b 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/ErrorReport.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/ErrorReport.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.api; +package io.github.thebusybiscuit.slimefun4.api; import java.io.File; import java.io.FileNotFoundException; @@ -20,6 +20,10 @@ import org.bukkit.plugin.Plugin; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.Slimefun.SlimefunPlugin; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.api.PlayerProfile; +import me.mrCookieSlime.Slimefun.api.Slimefun; +import me.mrCookieSlime.Slimefun.api.TickerTask; public class ErrorReport { diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/JsonDataHolder.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/JsonDataHolder.java new file mode 100644 index 000000000..7e43612c9 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/JsonDataHolder.java @@ -0,0 +1,157 @@ +package io.github.thebusybiscuit.slimefun4.api; + +import java.util.Optional; +import java.util.function.Function; +import java.util.function.IntFunction; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; + +public abstract class JsonDataHolder { + + protected JsonObject data; + private boolean dirty; + + public JsonDataHolder(JsonObject data) { + this.data = data; + this.dirty = false; + } + + public void markDirty() { + dirty = true; + } + + public boolean isDirty() { + return dirty; + } + + public void markClean() { + dirty = false; + } + + // Setters + public void setString(String key, String value) { + data.addProperty(key, value); + markDirty(); + } + + public void setInt(String key, int value) { + data.addProperty(key, value); + markDirty(); + } + + public void setBoolean(String key, boolean value) { + data.addProperty(key, value); + markDirty(); + } + + public void setFloat(String key, float value) { + data.addProperty(key, value); + markDirty(); + } + + public void setStringArray(String key, String[] array) { + JsonArray json = new JsonArray(); + for (String value: array) json.add(value); + data.add(key, json); + markDirty(); + } + + public void setIntArray(String key, int[] array) { + JsonArray json = new JsonArray(); + for (int value: array) json.add(value); + data.add(key, json); + markDirty(); + } + + public void setBooleanArray(String key, boolean[] array) { + JsonArray json = new JsonArray(); + for (boolean value: array) json.add(value); + data.add(key, json); + markDirty(); + } + + public void setFloatArray(String key, float[] array) { + JsonArray json = new JsonArray(); + for (float value: array) json.add(value); + data.add(key, json); + markDirty(); + } + + // Getters + public Optional getString(String key) { + return getPrimitive(key, JsonElement::getAsString); + } + public String getString(String key, String defaultValue) { + return getString(key).orElse(defaultValue); + } + + public Optional getInt(String key) { + return getPrimitive(key, JsonElement::getAsInt); + } + public int getInt(String key, int defaultValue) { + return getInt(key).orElse(defaultValue); + } + + public Optional getBoolean(String key) { + return getPrimitive(key, JsonElement::getAsBoolean); + } + public boolean getBoolean(String key, boolean defaultValue) { + return getBoolean(key).orElse(defaultValue); + } + + public Optional getFloat(String key) { + return getPrimitive(key, JsonElement::getAsFloat); + } + public float getFloat(String key, float defaultValue) { + return getFloat(key).orElse(defaultValue); + } + + public Optional getStringArray(String key) { + return getArray(key, String[]::new, JsonElement::getAsString); + } + + public Optional getIntArray(String key) { + return getArray(key, Integer[]::new, JsonElement::getAsInt); + } + + public Optional getBooleanArray(String key) { + return getArray(key, Boolean[]::new, JsonElement::getAsBoolean); + } + + public Optional getFloatArray(String key) { + return getArray(key, Float[]::new, JsonElement::getAsFloat); + } + + protected Optional getArray(String key, IntFunction constructor, Function getter) { + JsonElement element = data.get(key); + + if (element == null || !(element instanceof JsonArray)) { + return Optional.empty(); + } + else { + JsonArray json = (JsonArray) element; + T[] array = constructor.apply(json.size()); + + for (int i = 0; i < array.length; i++) { + array[i] = getter.apply(json.get(i)); + } + + return Optional.of(array); + } + } + + protected Optional getPrimitive(String key, Function getter) { + JsonElement element = data.get(key); + + if (element == null || !(element instanceof JsonPrimitive)) { + return Optional.empty(); + } + else { + return Optional.of(getter.apply(element)); + } + } + +} \ No newline at end of file diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/api/recipes/ContextualRecipe.java b/src/main/java/io/github/thebusybiscuit/slimefun4/api/recipes/ContextualRecipe.java new file mode 100644 index 000000000..2ea2e6685 --- /dev/null +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/api/recipes/ContextualRecipe.java @@ -0,0 +1,13 @@ +package io.github.thebusybiscuit.slimefun4.api.recipes; + +import java.util.function.Predicate; + +import org.bukkit.inventory.ItemStack; + +public interface ContextualRecipe extends Predicate { + + boolean isShapeless(); + + ItemStack getOutput(ItemStack[] input); + +} diff --git a/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java b/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java index 10e8ceba1..ecad6c60c 100644 --- a/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java +++ b/src/main/java/me/mrCookieSlime/Slimefun/api/TickerTask.java @@ -22,6 +22,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import io.github.thebusybiscuit.cscorelib2.chat.ChatColors; +import io.github.thebusybiscuit.slimefun4.api.ErrorReport; import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage; import me.mrCookieSlime.CSCoreLibPlugin.general.Chat.TellRawMessage.HoverAction; import me.mrCookieSlime.Slimefun.SlimefunPlugin;