dc val
This commit is contained in:
		@@ -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