dc val
This commit is contained in:
@@ -18,7 +18,7 @@ loader_version_range=[2,)
|
||||
mod_id=l2core
|
||||
mod_name=L2Core
|
||||
mod_license=LGPL-2.1
|
||||
mod_version=3.0.3-pre1
|
||||
mod_version=3.0.3-pre7
|
||||
mod_group_id=dev.xkmc
|
||||
mod_authors=lcy0x1
|
||||
mod_description=Core Library mod for all L2 mods
|
||||
|
||||
@@ -5,6 +5,7 @@ import dev.xkmc.l2core.capability.attachment.GeneralCapabilityHolder;
|
||||
import dev.xkmc.l2core.capability.attachment.GeneralCapabilityTemplate;
|
||||
import dev.xkmc.l2core.capability.player.PlayerCapabilityHolder;
|
||||
import dev.xkmc.l2core.capability.player.PlayerCapabilityTemplate;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.neoforged.neoforge.attachment.AttachmentHolder;
|
||||
import net.neoforged.neoforge.attachment.AttachmentType;
|
||||
|
||||
|
||||
66
src/main/java/dev/xkmc/l2core/init/reg/simple/DCReg.java
Normal file
66
src/main/java/dev/xkmc/l2core/init/reg/simple/DCReg.java
Normal file
@@ -0,0 +1,66 @@
|
||||
package dev.xkmc.l2core.init.reg.simple;
|
||||
|
||||
import com.mojang.serialization.Codec;
|
||||
import dev.xkmc.l2serial.serialization.codec.CodecAdaptor;
|
||||
import net.minecraft.core.component.DataComponentType;
|
||||
import net.minecraft.core.registries.BuiltInRegistries;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.ComponentSerialization;
|
||||
import net.minecraft.network.codec.ByteBufCodecs;
|
||||
import net.minecraft.network.codec.StreamCodec;
|
||||
import net.neoforged.neoforge.registries.DeferredHolder;
|
||||
import net.neoforged.neoforge.registries.DeferredRegister;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public record DCReg(DeferredRegister<DataComponentType<?>> reg) {
|
||||
|
||||
public static DCReg of(Reg parent) {
|
||||
return new DCReg(parent.make(BuiltInRegistries.DATA_COMPONENT_TYPE));
|
||||
}
|
||||
|
||||
public <T> DCVal<T> reg(String id, Codec<T> codec, StreamCodec<? super RegistryFriendlyByteBuf, T> stream) {
|
||||
return new DCValImpl<>(reg.register(id, () -> DataComponentType.<T>builder().persistent(codec).networkSynchronized(stream).build()));
|
||||
}
|
||||
|
||||
public <T> DCVal<T> reg(String id, Class<T> cls) {
|
||||
var cdc = new CodecAdaptor<>(cls);
|
||||
return new DCValImpl<>(reg.register(id, () -> DataComponentType.<T>builder().persistent(cdc).networkSynchronized(cdc.toNetwork()).build()));
|
||||
}
|
||||
|
||||
public DCVal<Integer> intVal(String id) {
|
||||
return reg(id, Codec.INT, ByteBufCodecs.INT);
|
||||
}
|
||||
|
||||
public DCVal<Double> doubleVal(String id) {
|
||||
return reg(id, Codec.DOUBLE, ByteBufCodecs.DOUBLE);
|
||||
}
|
||||
|
||||
public DCVal<Long> longVal(String id) {
|
||||
return reg(id, Codec.LONG, ByteBufCodecs.VAR_LONG);
|
||||
}
|
||||
|
||||
public DCVal<String> str(String id) {
|
||||
return reg(id, Codec.STRING, ByteBufCodecs.STRING_UTF8);
|
||||
}
|
||||
|
||||
public DCVal<UUID> uuid(String id) {
|
||||
return reg(id, Codec.STRING.xmap(UUID::fromString, UUID::toString),
|
||||
StreamCodec.of((b, e) -> FriendlyByteBuf.writeUUID(b, e), b -> FriendlyByteBuf.readUUID(b)));
|
||||
}
|
||||
|
||||
public DCVal<Component> component(String id) {
|
||||
return reg(id, ComponentSerialization.CODEC, ComponentSerialization.STREAM_CODEC);
|
||||
}
|
||||
|
||||
private record DCValImpl<T>(DeferredHolder<DataComponentType<?>, DataComponentType<T>> val) implements DCVal<T> {
|
||||
|
||||
@Override
|
||||
public DataComponentType<T> get() {
|
||||
return val.get();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
24
src/main/java/dev/xkmc/l2core/init/reg/simple/DCVal.java
Normal file
24
src/main/java/dev/xkmc/l2core/init/reg/simple/DCVal.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package dev.xkmc.l2core.init.reg.simple;
|
||||
|
||||
import net.minecraft.core.component.DataComponentType;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public interface DCVal<T> extends Val<DataComponentType<T>> {
|
||||
|
||||
@Nullable
|
||||
default T get(ItemStack stack) {
|
||||
return stack.get(this);
|
||||
}
|
||||
|
||||
default T getOrDefault(ItemStack stack, T def) {
|
||||
T ans = stack.get(this);
|
||||
return ans == null ? def : ans;
|
||||
}
|
||||
|
||||
default ItemStack set(ItemStack stack, T val) {
|
||||
stack.set(this, val);
|
||||
return stack;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
package dev.xkmc.l2core.init.reg.simple;
|
||||
|
||||
public interface Val<T> {
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public interface Val<T> extends Supplier<T> {
|
||||
|
||||
T get();
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package dev.xkmc.l2core.serial.advancements;
|
||||
|
||||
import dev.xkmc.l2serial.serialization.marker.SerialClass;
|
||||
import dev.xkmc.l2serial.util.Wrappers;
|
||||
import net.minecraft.advancements.Criterion;
|
||||
import net.minecraft.advancements.critereon.ContextAwarePredicate;
|
||||
import net.minecraft.advancements.critereon.SimpleCriterionTrigger;
|
||||
|
||||
@@ -10,9 +12,19 @@ import java.util.Optional;
|
||||
public class BaseCriterionInstance<T extends BaseCriterionInstance<T, R>, R extends BaseCriterion<T, R>>
|
||||
implements SimpleCriterionTrigger.SimpleInstance {
|
||||
|
||||
private final R r;
|
||||
|
||||
protected BaseCriterionInstance(R r) {
|
||||
this.r = r;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<ContextAwarePredicate> player() {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
public Criterion<T> build() {
|
||||
return new Criterion<>(r, Wrappers.cast(this));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user