Skip to content

Commit 2329d67

Browse files
committed
Bumps version.
1 parent a91a9e0 commit 2329d67

File tree

8 files changed

+60
-33
lines changed

8 files changed

+60
-33
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
package kr.toxicity.libraries.datacomponent.api;
22

3+
import com.google.gson.JsonElement;
34
import com.google.gson.JsonObject;
45
import org.jetbrains.annotations.NotNull;
6+
import org.jetbrains.annotations.Nullable;
7+
58

69
public interface DataComponent {
7-
void set(@NotNull ItemAdapter adapter);
10+
@Nullable default <T> T get(@NotNull DataComponentType<T> type) {
11+
var get = getToJson(type);
12+
return get != null ? type.codec().decode(get) : null;
13+
}
14+
@Nullable JsonElement getToJson(@NotNull DataComponentType<?> type);
815
@NotNull
9-
JsonObject get();
16+
JsonObject getToJson();
17+
default boolean has(@NotNull DataComponentType<?> type) {
18+
return get(type) != null;
19+
}
20+
void set(@NotNull ItemAdapter adapter);
1021
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package kr.toxicity.libraries.datacomponent.api.wrapper;
22

3+
import kr.toxicity.libraries.datacomponent.api.Codec;
4+
import kr.toxicity.libraries.datacomponent.api.NMS;
35
import kr.toxicity.libraries.datacomponent.api.TrimPattern;
46
import org.jetbrains.annotations.NotNull;
57

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

3+
import kr.toxicity.libraries.datacomponent.api.Codec;
4+
import kr.toxicity.libraries.datacomponent.api.NMS;
35
import org.jetbrains.annotations.NotNull;
46

57
import java.util.List;
68

7-
public record FoodProperties(int nutrition, float saturation, boolean canAlwaysEat, float eatSeconds, @NotNull List<PossibleEffect> effects) {
9+
public record FoodProperties(int nutrition, float saturation, boolean canAlwaysEat, float eatSeconds, @NotNull List<PossibleEffect> effects) implements ComponentData<FoodProperties> {
810
public record PossibleEffect(@NotNull MobEffectInstance effect, float probability) {
911
}
12+
13+
@Override
14+
public Codec<FoodProperties> codec() {
15+
return NMS.nms().food().codec();
16+
}
1017
}

build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ allprojects {
1111
apply(plugin = "java")
1212

1313
group = "kr.toxicity.libraries.datacomponent"
14-
version = "1.0.3"
14+
version = "1.0.4"
1515

1616
repositories {
1717
mavenCentral()

dist/src/main/java/kr/toxicity/libraries/datacomponent/DataComponentAPIImpl.java

+11-22
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,9 @@
44
import kr.toxicity.libraries.datacomponent.api.*;
55
import org.bukkit.Bukkit;
66
import org.jetbrains.annotations.NotNull;
7+
import org.jetbrains.annotations.Nullable;
78

8-
import java.lang.reflect.Type;
9-
import java.util.ArrayList;
10-
import java.util.Collections;
11-
import java.util.List;
12-
import java.util.Map;
13-
import java.util.function.Consumer;
9+
import java.util.*;
1410

1511
@SuppressWarnings("unused")
1612
public final class DataComponentAPIImpl extends DataComponentAPI {
@@ -34,23 +30,28 @@ private DataComponentAPIImpl(@NotNull MinecraftVersion current){
3430
throw new UnsupportedOperationException("Unsupported minecraft version: " + current);
3531
}
3632
deserializer = e -> {
37-
List<Consumer<ItemAdapter>> consumer = Collections.synchronizedList(new ArrayList<>());
33+
Map<DataComponentType<?>, JsonElement> consumer = Collections.synchronizedMap(new HashMap<>());
3834
for (Map.Entry<String, JsonElement> entry : e.entrySet()) {
3935
var type = nms.componentRegistry().get(entry.getKey());
4036
if (type != null) {
41-
consumer.add(a -> type.setToJson(a, entry.getValue()));
37+
consumer.put(type, entry.getValue());
4238
}
4339
}
4440
return new DataComponent() {
4541
@Override
4642
public void set(@NotNull ItemAdapter adapter) {
47-
consumer.forEach(e -> e.accept(adapter));
43+
consumer.forEach(adapter::setToJson);
4844
}
4945

5046
@Override
51-
public @NotNull JsonObject get() {
47+
public @NotNull JsonObject getToJson() {
5248
return e;
5349
}
50+
51+
@Override
52+
public @Nullable JsonElement getToJson(@NotNull DataComponentType<?> type) {
53+
return consumer.get(type);
54+
}
5455
};
5556
};
5657
}
@@ -60,18 +61,6 @@ public void set(@NotNull ItemAdapter adapter) {
6061
return deserializer;
6162
}
6263

63-
private record RegistryTypeAdapter<T>(DataComponentType<T> type) implements JsonSerializer<T>, JsonDeserializer<T> {
64-
@Override
65-
public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) {
66-
return type.codec().encode(src);
67-
}
68-
69-
@Override
70-
public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
71-
return type.codec().decode(json);
72-
}
73-
}
74-
7564
static void load() {
7665
DataComponentAPI.api(new DataComponentAPIImpl());
7766
}

nms/v1_20_R4/src/main/java/kr/toxicity/libraries/datacomponent/nms/v1_20_R4/DataComponentTypeImpl.java

+14-4
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@
1414
import org.jetbrains.annotations.Nullable;
1515
import org.jetbrains.annotations.Unmodifiable;
1616

17-
import java.util.Collection;
18-
import java.util.HashMap;
19-
import java.util.List;
20-
import java.util.Map;
17+
import java.util.*;
2118

2219
@RequiredArgsConstructor
2320
final class DataComponentTypeImpl<T, R> implements kr.toxicity.libraries.datacomponent.api.DataComponentType<T> {
@@ -268,4 +265,17 @@ public T set(@NotNull ItemAdapter adapter, @Nullable T t) {
268265
return r != null ? converter.asWrapper(r) : null;
269266
} else throw new IllegalArgumentException("adapter");
270267
}
268+
269+
@Override
270+
public boolean equals(Object object) {
271+
if (this == object) return true;
272+
if (object == null || getClass() != object.getClass()) return false;
273+
DataComponentTypeImpl<?, ?> that = (DataComponentTypeImpl<?, ?>) object;
274+
return Objects.equals(key, that.key);
275+
}
276+
277+
@Override
278+
public int hashCode() {
279+
return Objects.hashCode(key);
280+
}
271281
}

test-plugin/library/src/main/java/kr/toxicity/test/TestPlugin.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public void onEnable() {
2525
data.set(diamond);
2626
getLogger().info(diamond.serialize().toString());
2727

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

test-plugin/shade/src/main/java/kr/toxicity/test/TestPlugin.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.gson.JsonParser;
44
import kr.toxicity.libraries.datacomponent.DataComponentAPIBukkit;
5+
import kr.toxicity.libraries.datacomponent.api.DataComponent;
56
import kr.toxicity.libraries.datacomponent.api.DataComponentAPI;
67
import kr.toxicity.libraries.datacomponent.api.NMS;
78
import kr.toxicity.libraries.datacomponent.api.wrapper.Rarity;
@@ -20,6 +21,7 @@ public void onEnable() {
2021
apply.set(NMS.nms().rarity(), Rarity.EPIC);
2122
getLogger().info(apply.serialize().toString());
2223

24+
// Serialization.
2325
var data = DataComponentAPI.api().deserializer().deserialize(
2426
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()
2527
);
@@ -28,6 +30,7 @@ public void onEnable() {
2830
data.set(diamond);
2931
getLogger().info(diamond.serialize().toString());
3032

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

0 commit comments

Comments
 (0)