Skip to content

Commit

Permalink
Bumps version.
Browse files Browse the repository at this point in the history
  • Loading branch information
toxicity188 committed May 15, 2024
1 parent a91a9e0 commit 2329d67
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 33 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
package kr.toxicity.libraries.datacomponent.api;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;


public interface DataComponent {
void set(@NotNull ItemAdapter adapter);
@Nullable default <T> T get(@NotNull DataComponentType<T> type) {
var get = getToJson(type);
return get != null ? type.codec().decode(get) : null;
}
@Nullable JsonElement getToJson(@NotNull DataComponentType<?> type);
@NotNull
JsonObject get();
JsonObject getToJson();
default boolean has(@NotNull DataComponentType<?> type) {
return get(type) != null;
}
void set(@NotNull ItemAdapter adapter);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
package kr.toxicity.libraries.datacomponent.api.wrapper;

import kr.toxicity.libraries.datacomponent.api.Codec;
import kr.toxicity.libraries.datacomponent.api.NMS;
import kr.toxicity.libraries.datacomponent.api.TrimPattern;
import org.jetbrains.annotations.NotNull;

public record ArmorTrim(@NotNull TrimMaterial material, @NotNull TrimPattern pattern, boolean showInTooltip) {
public record ArmorTrim(@NotNull TrimMaterial material, @NotNull TrimPattern pattern, boolean showInTooltip) implements ComponentData<ArmorTrim> {
@Override
public Codec<ArmorTrim> codec() {
return NMS.nms().trim().codec();
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package kr.toxicity.libraries.datacomponent.api.wrapper;

import kr.toxicity.libraries.datacomponent.api.Codec;
import kr.toxicity.libraries.datacomponent.api.NMS;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public record FoodProperties(int nutrition, float saturation, boolean canAlwaysEat, float eatSeconds, @NotNull List<PossibleEffect> effects) {
public record FoodProperties(int nutrition, float saturation, boolean canAlwaysEat, float eatSeconds, @NotNull List<PossibleEffect> effects) implements ComponentData<FoodProperties> {
public record PossibleEffect(@NotNull MobEffectInstance effect, float probability) {
}

@Override
public Codec<FoodProperties> codec() {
return NMS.nms().food().codec();
}
}
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ allprojects {
apply(plugin = "java")

group = "kr.toxicity.libraries.datacomponent"
version = "1.0.3"
version = "1.0.4"

repositories {
mavenCentral()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,9 @@
import kr.toxicity.libraries.datacomponent.api.*;
import org.bukkit.Bukkit;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.*;

@SuppressWarnings("unused")
public final class DataComponentAPIImpl extends DataComponentAPI {
Expand All @@ -34,23 +30,28 @@ private DataComponentAPIImpl(@NotNull MinecraftVersion current){
throw new UnsupportedOperationException("Unsupported minecraft version: " + current);
}
deserializer = e -> {
List<Consumer<ItemAdapter>> consumer = Collections.synchronizedList(new ArrayList<>());
Map<DataComponentType<?>, JsonElement> consumer = Collections.synchronizedMap(new HashMap<>());
for (Map.Entry<String, JsonElement> entry : e.entrySet()) {
var type = nms.componentRegistry().get(entry.getKey());
if (type != null) {
consumer.add(a -> type.setToJson(a, entry.getValue()));
consumer.put(type, entry.getValue());
}
}
return new DataComponent() {
@Override
public void set(@NotNull ItemAdapter adapter) {
consumer.forEach(e -> e.accept(adapter));
consumer.forEach(adapter::setToJson);
}

@Override
public @NotNull JsonObject get() {
public @NotNull JsonObject getToJson() {
return e;
}

@Override
public @Nullable JsonElement getToJson(@NotNull DataComponentType<?> type) {
return consumer.get(type);
}
};
};
}
Expand All @@ -60,18 +61,6 @@ public void set(@NotNull ItemAdapter adapter) {
return deserializer;
}

private record RegistryTypeAdapter<T>(DataComponentType<T> type) implements JsonSerializer<T>, JsonDeserializer<T> {
@Override
public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) {
return type.codec().encode(src);
}

@Override
public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return type.codec().decode(json);
}
}

static void load() {
DataComponentAPI.api(new DataComponentAPIImpl());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,7 @@
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.Unmodifiable;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;

@RequiredArgsConstructor
final class DataComponentTypeImpl<T, R> implements kr.toxicity.libraries.datacomponent.api.DataComponentType<T> {
Expand Down Expand Up @@ -268,4 +265,17 @@ public T set(@NotNull ItemAdapter adapter, @Nullable T t) {
return r != null ? converter.asWrapper(r) : null;
} else throw new IllegalArgumentException("adapter");
}

@Override
public boolean equals(Object object) {
if (this == object) return true;
if (object == null || getClass() != object.getClass()) return false;
DataComponentTypeImpl<?, ?> that = (DataComponentTypeImpl<?, ?>) object;
return Objects.equals(key, that.key);
}

@Override
public int hashCode() {
return Objects.hashCode(key);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public void onEnable() {
data.set(diamond);
getLogger().info(diamond.serialize().toString());

getLogger().info(DataComponentAPI.api().adapter(new ItemStack(Material.NETHERITE_CHESTPLATE)).serialize().toString());
var value = data.get(NMS.nms().rarity());
if (value != null) getLogger().info(value.name());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.google.gson.JsonParser;
import kr.toxicity.libraries.datacomponent.DataComponentAPIBukkit;
import kr.toxicity.libraries.datacomponent.api.DataComponent;
import kr.toxicity.libraries.datacomponent.api.DataComponentAPI;
import kr.toxicity.libraries.datacomponent.api.NMS;
import kr.toxicity.libraries.datacomponent.api.wrapper.Rarity;
Expand All @@ -20,6 +21,7 @@ public void onEnable() {
apply.set(NMS.nms().rarity(), Rarity.EPIC);
getLogger().info(apply.serialize().toString());

// Serialization.
var data = DataComponentAPI.api().deserializer().deserialize(
JsonParser.parseString("{\"damage\":3,\"max_stack_size\":1,\"repair_cost\":20,\"tool\":{\"rules\":[{\"blocks\":\"minecraft:cobweb\",\"speed\":15.0,\"correct_for_drops\":true},{\"blocks\":\"#minecraft:sword_efficient\",\"speed\":1.5}],\"damage_per_block\":2},\"max_damage\":1561,\"item_lore\":[],\"rarity\":\"epic\"}").getAsJsonObject()
);
Expand All @@ -28,6 +30,7 @@ public void onEnable() {
data.set(diamond);
getLogger().info(diamond.serialize().toString());

getLogger().info(DataComponentAPI.api().adapter(new ItemStack(Material.NETHERITE_CHESTPLATE)).serialize().toString());
var value = data.get(NMS.nms().rarity());
if (value != null) getLogger().info(value.name());
}
}

0 comments on commit 2329d67

Please sign in to comment.