Skip to content

Commit 5e8ab68

Browse files
committed
1.21 supports.
1 parent 0f408a5 commit 5e8ab68

14 files changed

Lines changed: 1121 additions & 10 deletions

File tree

.idea/gradle.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/src/main/java/kr/toxicity/libraries/datacomponent/api/wrapper/FoodProperties.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
import kr.toxicity.libraries.datacomponent.api.Codec;
44
import kr.toxicity.libraries.datacomponent.api.NMS;
5+
import org.bukkit.inventory.ItemStack;
56
import org.jetbrains.annotations.NotNull;
67

78
import java.util.List;
9+
import java.util.Optional;
810

9-
public record FoodProperties(int nutrition, float saturation, boolean canAlwaysEat, float eatSeconds, @NotNull List<PossibleEffect> effects) implements ComponentData<FoodProperties> {
11+
public record FoodProperties(int nutrition, float saturation, boolean canAlwaysEat, float eatSeconds, @NotNull Optional<ItemStack> usingConvertsTo, @NotNull List<PossibleEffect> effects) implements ComponentData<FoodProperties> {
1012
public record PossibleEffect(@NotNull MobEffectInstance effect, float probability) {
1113
}
1214

build.gradle.kts

Lines changed: 3 additions & 2 deletions
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.11"
14+
version = "1.0.12"
1515

1616
repositories {
1717
mavenCentral()
@@ -69,6 +69,7 @@ val dist = project("dist").paper().dependency(api)
6969

7070
val nms = listOf(
7171
project("nms:v1_20_R4").paperweight(),
72+
project("nms:v1_21_R1").paperweight(),
7273
)
7374

7475
nms.forEach {
@@ -97,7 +98,7 @@ listOf(
9798
runServer {
9899
runDirectory(File(rootProject.projectDir, "run"))
99100
dependsOn(rootProject.tasks.build)
100-
version("1.20.6")
101+
version("1.21")
101102
}
102103
}
103104
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ private DataComponentAPIImpl(@NotNull MinecraftVersion current){
2626
this.current = current;
2727
if (current.equals(MinecraftVersionImpl.V1_20_5) || current.equals(MinecraftVersionImpl.V1_20_6)) {
2828
nms = new kr.toxicity.libraries.datacomponent.nms.v1_20_R4.NMSImpl();
29-
} else {
29+
} else if (current.equals(MinecraftVersionImpl.V1_21)) {
30+
nms = new kr.toxicity.libraries.datacomponent.nms.v1_21_R1.NMSImpl();
31+
}else {
3032
throw new UnsupportedOperationException("Unsupported minecraft version: " + current);
3133
}
3234
deserializer = e -> {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public int compareTo(@NotNull MinecraftVersionImpl o) {
1414
return COMPARATOR.compare(this, o);
1515
}
1616

17+
public static final MinecraftVersionImpl V1_21 = new MinecraftVersionImpl(1, 21, 0);
1718
public static final MinecraftVersionImpl V1_20_6 = new MinecraftVersionImpl(1, 20, 6);
1819
public static final MinecraftVersionImpl V1_20_5 = new MinecraftVersionImpl(1, 20, 5);
1920

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ public net.minecraft.world.effect.MobEffectInstance asVanilla(@NotNull MobEffect
478478
f.saturation(),
479479
f.canAlwaysEat(),
480480
f.eatSeconds(),
481+
Optional.empty(),
481482
f.effects().stream().map(e -> new FoodProperties.PossibleEffect(MOB_EFFECT_INSTANCE.asWrapper(e.effect()), e.probability())).toList()
482483
)
483484
);

nms/v1_21_R1/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
dependencies {
2+
paperweight.paperDevBundle("1.21-R0.1-SNAPSHOT")
3+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package kr.toxicity.libraries.datacomponent.nms.v1_21_R1;
2+
3+
import com.google.gson.JsonArray;
4+
import com.google.gson.JsonElement;
5+
import com.google.gson.JsonObject;
6+
import com.google.gson.JsonPrimitive;
7+
import com.mojang.serialization.Codec;
8+
import com.mojang.serialization.JsonOps;
9+
import lombok.RequiredArgsConstructor;
10+
import net.minecraft.core.RegistryAccess;
11+
import net.minecraft.core.registries.BuiltInRegistries;
12+
import net.minecraft.network.chat.Component;
13+
import net.minecraft.network.chat.ComponentSerialization;
14+
import net.minecraft.network.chat.contents.PlainTextContents;
15+
import net.minecraft.resources.RegistryOps;
16+
import net.minecraft.resources.ResourceLocation;
17+
import net.minecraft.util.Unit;
18+
import net.minecraft.world.food.FoodProperties;
19+
import net.minecraft.world.item.AdventureModePredicate;
20+
import net.minecraft.world.item.Rarity;
21+
import net.minecraft.world.item.alchemy.PotionContents;
22+
import net.minecraft.world.item.armortrim.ArmorTrim;
23+
import net.minecraft.world.item.component.*;
24+
import net.minecraft.world.level.saveddata.maps.MapId;
25+
import org.jetbrains.annotations.NotNull;
26+
27+
import java.util.function.Function;
28+
29+
@RequiredArgsConstructor
30+
final class CodecImpl<T> implements kr.toxicity.libraries.datacomponent.api.Codec<T> {
31+
32+
private static final RegistryOps<JsonElement> OPS = RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY).createSerializationContext(JsonOps.INSTANCE);
33+
34+
static final CodecImpl<Component> COMPONENT = of(ComponentSerialization.CODEC, t -> t.stream().count() == 1 && t.getStyle().isEmpty() && t.getContents() instanceof PlainTextContents textContents ? new JsonPrimitive(textContents.text()) : new JsonObject());
35+
static final CodecImpl<ItemLore> ITEM_LORE = of(ItemLore.CODEC, t -> new JsonArray());
36+
static final CodecImpl<Rarity> RARITY = of(Rarity.CODEC, t -> new JsonPrimitive(t.name().toLowerCase()));
37+
static final CodecImpl<Unit> UNIT = of(Codec.unit(Unit.INSTANCE), t -> new JsonPrimitive(true));
38+
static final CodecImpl<AdventureModePredicate> ADVENTURE_MODE_PREDICATE = of(AdventureModePredicate.CODEC, t -> new JsonObject());
39+
static final CodecImpl<Tool> TOOL = of(Tool.CODEC, t -> new JsonObject());
40+
static final CodecImpl<DyedItemColor> DYED_ITEM_COLOR = of(DyedItemColor.CODEC, t -> new JsonObject());
41+
static final CodecImpl<MapItemColor> MAP_ITEM_COLOR = of(MapItemColor.CODEC, t -> new JsonPrimitive(t.rgb()));
42+
static final CodecImpl<MapId> MAP_ID = of(MapId.CODEC, t -> new JsonPrimitive(t.id()));
43+
static final CodecImpl<BundleContents> BUNDLE_CONTENTS = of(BundleContents.CODEC, t -> new JsonArray());
44+
static final CodecImpl<PotionContents> POTION_CONTENTS = of(PotionContents.CODEC, t -> new JsonObject());
45+
static final CodecImpl<SuspiciousStewEffects> SUSPICIOUS_STEW_EFFECTS = of(SuspiciousStewEffects.CODEC, t -> new JsonArray());
46+
static final CodecImpl<WritableBookContent> WRITABLE_BOOK_CONTENT = of(WritableBookContent.CODEC, t -> new JsonObject());
47+
static final CodecImpl<WrittenBookContent> WRITTEN_BOOK_CONTENT = of(WrittenBookContent.CODEC, t -> new JsonObject());
48+
static final CodecImpl<BlockItemStateProperties> BLOCK_STATE = of(BlockItemStateProperties.CODEC, t -> new JsonObject());
49+
static final CodecImpl<FoodProperties> FOOD = of(FoodProperties.DIRECT_CODEC, t -> new JsonObject());
50+
static final CodecImpl<ArmorTrim> TRIM = of(ArmorTrim.CODEC, t -> new JsonObject());
51+
static final CodecImpl<CustomModelData> CUSTOM_MODEL_DATA = of(CustomModelData.CODEC, t -> new JsonPrimitive(t.value()));
52+
static final CodecImpl<CustomData> CUSTOM_DATA = of(CustomData.CODEC, t -> new JsonObject());
53+
static final CodecImpl<ResourceLocation> RESOURCE_LOCATION = of(ResourceLocation.CODEC, t -> new JsonPrimitive(t.toString()));
54+
55+
private static <T> @NotNull CodecImpl<T> of(@NotNull Codec<T> codec, Function<T, JsonElement> function) {
56+
return new CodecImpl<>(
57+
codec,
58+
function
59+
);
60+
}
61+
62+
private final Codec<T> codec;
63+
private final Function<T, JsonElement> function;
64+
65+
@Override
66+
public @NotNull JsonElement encode(@NotNull T t) {
67+
var element = function.apply(t);
68+
return element instanceof JsonPrimitive ? element : codec.encode(t, OPS, element).getOrThrow();
69+
}
70+
71+
@Override
72+
public @NotNull T decode(@NotNull JsonElement t) {
73+
return codec.decode(OPS, t).getOrThrow().getFirst();
74+
}
75+
}

0 commit comments

Comments
 (0)