diff --git a/gradle.properties b/gradle.properties index a9ac03d..300dea9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ loader_version_range=[2,) mod_id=l2core mod_name=L2Core mod_license=LGPL-2.1 -mod_version=3.0.3-pre8 +mod_version=3.0.5-pre1 mod_group_id=dev.xkmc mod_authors=lcy0x1 mod_description=Core Library mod for all L2 mods diff --git a/src/main/java/dev/xkmc/l2core/capability/conditionals/BaseTickingToken.java b/src/main/java/dev/xkmc/l2core/capability/conditionals/BaseTickingToken.java new file mode 100644 index 0000000..2e32b91 --- /dev/null +++ b/src/main/java/dev/xkmc/l2core/capability/conditionals/BaseTickingToken.java @@ -0,0 +1,41 @@ +package dev.xkmc.l2core.capability.conditionals; + +import dev.xkmc.l2serial.serialization.marker.SerialClass; +import dev.xkmc.l2serial.serialization.marker.SerialField; +import net.minecraft.world.entity.player.Player; + +@SerialClass +public class BaseTickingToken extends ConditionalToken { + + @SerialField + public int tick = 0; + + public BaseTickingToken() { + + } + + public BaseTickingToken(int time) { + this.tick = time; + } + + @Override + public boolean tick(Player player) { + if (tick > 0) { + tick--; + onTick(player); + return false; + } else { + onRemove(player); + return true; + } + } + + public void onTick(Player player) { + + } + + public void onRemove(Player player) { + + } + +} diff --git a/src/main/java/dev/xkmc/l2core/capability/conditionals/ConditionalData.java b/src/main/java/dev/xkmc/l2core/capability/conditionals/ConditionalData.java index 0d167b5..e8a9958 100644 --- a/src/main/java/dev/xkmc/l2core/capability/conditionals/ConditionalData.java +++ b/src/main/java/dev/xkmc/l2core/capability/conditionals/ConditionalData.java @@ -10,6 +10,7 @@ import javax.annotation.Nullable; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; +import java.util.function.Supplier; @SerialClass public class ConditionalData extends PlayerCapabilityTemplate { @@ -30,8 +31,8 @@ public class ConditionalData extends PlayerCapabilityTemplate { data.remove(e); } - public T getOrCreateData(TokenProvider setEffect, C ent) { - return Wrappers.cast(data.computeIfAbsent(setEffect.getKey(), e -> setEffect.getData(ent))); + public T getOrCreateData(TokenKey setEffect, Supplier fallback) { + return Wrappers.cast(data.computeIfAbsent(setEffect, k -> fallback.get())); } @Nullable diff --git a/src/main/java/dev/xkmc/l2core/capability/conditionals/Context.java b/src/main/java/dev/xkmc/l2core/capability/conditionals/Context.java deleted file mode 100644 index 426f5c9..0000000 --- a/src/main/java/dev/xkmc/l2core/capability/conditionals/Context.java +++ /dev/null @@ -1,4 +0,0 @@ -package dev.xkmc.l2core.capability.conditionals; - -public interface Context { -} diff --git a/src/main/java/dev/xkmc/l2core/capability/conditionals/TokenProvider.java b/src/main/java/dev/xkmc/l2core/capability/conditionals/TokenProvider.java deleted file mode 100644 index 2165214..0000000 --- a/src/main/java/dev/xkmc/l2core/capability/conditionals/TokenProvider.java +++ /dev/null @@ -1,8 +0,0 @@ -package dev.xkmc.l2core.capability.conditionals; - -public interface TokenProvider { - - T getData(C ent); - - TokenKey getKey(); -} diff --git a/src/main/java/dev/xkmc/l2core/capability/level/BaseSavedData.java b/src/main/java/dev/xkmc/l2core/capability/level/BaseSavedData.java index 938a030..f70708d 100644 --- a/src/main/java/dev/xkmc/l2core/capability/level/BaseSavedData.java +++ b/src/main/java/dev/xkmc/l2core/capability/level/BaseSavedData.java @@ -7,11 +7,17 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.saveddata.SavedData; @SerialClass -public class BaseSavedData extends SavedData { +public class BaseSavedData extends SavedData { + + private final Class cls; + + public BaseSavedData(Class cls) { + this.cls = cls; + } @Override public CompoundTag save(CompoundTag tag, HolderLookup.Provider provider) { - new TagCodec(provider).toTag(tag, this); + new TagCodec(provider).toTag(tag, cls, this); return tag; } diff --git a/src/main/java/dev/xkmc/l2core/init/L2TagGen.java b/src/main/java/dev/xkmc/l2core/init/L2TagGen.java index 22c7add..316545b 100644 --- a/src/main/java/dev/xkmc/l2core/init/L2TagGen.java +++ b/src/main/java/dev/xkmc/l2core/init/L2TagGen.java @@ -2,22 +2,31 @@ package dev.xkmc.l2core.init; import com.tterrag.registrate.providers.ProviderType; import com.tterrag.registrate.providers.RegistrateTagsProvider; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.entity.ai.attributes.Attribute; public class L2TagGen { - public static final ProviderType> EFF_TAGS = - ProviderType.register("tags/mob_effect", - type -> (p, e) -> new RegistrateTagsProvider.IntrinsicImpl<>(p, type, "mob_effects", - e.getGenerator().getPackOutput(), Registries.MOB_EFFECT, e.getLookupProvider(), - ench -> ResourceKey.create(Registries.MOB_EFFECT, BuiltInRegistries.MOB_EFFECT.getKey(ench)), - e.getExistingFileHelper())); + public static ProviderType> getProvider(ResourceKey> id, Registry reg) { + String name = id.location().getPath(); + return ProviderType.register("tags/" + name, + type -> (p, e) -> new RegistrateTagsProvider.IntrinsicImpl<>(p, type, name, + e.getGenerator().getPackOutput(), id, e.getLookupProvider(), + ench -> reg.getResourceKey(ench).get(), + e.getExistingFileHelper())); + } + public static final ProviderType> EFF_TAGS = + getProvider(Registries.MOB_EFFECT, BuiltInRegistries.MOB_EFFECT); + + public static final ProviderType> ATTR_TAGS = + getProvider(Registries.ATTRIBUTE, BuiltInRegistries.ATTRIBUTE); public static final TagKey TRACKED_EFFECTS = effectTag(ResourceLocation.fromNamespaceAndPath(L2Core.MODID, "tracked_effects")); diff --git a/src/main/java/dev/xkmc/l2core/init/reg/registrate/SimpleEntry.java b/src/main/java/dev/xkmc/l2core/init/reg/registrate/SimpleEntry.java index d95f506..50040df 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/registrate/SimpleEntry.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/registrate/SimpleEntry.java @@ -1,16 +1,23 @@ package dev.xkmc.l2core.init.reg.registrate; import com.tterrag.registrate.util.entry.RegistryEntry; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceKey; -public record SimpleEntry(RegistryEntry val) { +import java.util.function.Supplier; - ResourceKey key() { +public record SimpleEntry(RegistryEntry val) implements Supplier { + + public ResourceKey key() { return val.getKey(); } - T get() { + public T get() { return val.get(); } + public Holder holder() { + return val.getDelegate(); + } + } diff --git a/src/main/java/dev/xkmc/l2core/init/reg/simple/DCReg.java b/src/main/java/dev/xkmc/l2core/init/reg/simple/DCReg.java index a58848b..4da7b12 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/simple/DCReg.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/simple/DCReg.java @@ -1,6 +1,7 @@ package dev.xkmc.l2core.init.reg.simple; import com.mojang.serialization.Codec; +import dev.xkmc.l2core.util.DCStack; import dev.xkmc.l2serial.serialization.codec.CodecAdaptor; import net.minecraft.core.component.DataComponentType; import net.minecraft.core.registries.BuiltInRegistries; @@ -10,6 +11,7 @@ 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.minecraft.world.item.ItemStack; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; @@ -53,6 +55,11 @@ public record DCReg(DeferredRegister> reg) { StreamCodec.of((b, e) -> FriendlyByteBuf.writeUUID(b, e), b -> FriendlyByteBuf.readUUID(b)), true); } + public DCVal stack(String id) { + return reg(id, ItemStack.CODEC.xmap(DCStack::new, DCStack::stack), + ItemStack.STREAM_CODEC.map(DCStack::new, DCStack::stack), true); + } + public DCVal component(String id) { return reg(id, ComponentSerialization.CODEC, ComponentSerialization.STREAM_CODEC, true); } diff --git a/src/main/java/dev/xkmc/l2core/util/LootTableTemplate.java b/src/main/java/dev/xkmc/l2core/serial/loot/LootTableTemplate.java similarity index 99% rename from src/main/java/dev/xkmc/l2core/util/LootTableTemplate.java rename to src/main/java/dev/xkmc/l2core/serial/loot/LootTableTemplate.java index 2bb7b62..62ba73b 100644 --- a/src/main/java/dev/xkmc/l2core/util/LootTableTemplate.java +++ b/src/main/java/dev/xkmc/l2core/serial/loot/LootTableTemplate.java @@ -1,4 +1,4 @@ -package dev.xkmc.l2core.util; +package dev.xkmc.l2core.serial.loot; import net.minecraft.advancements.critereon.EnchantmentPredicate; import net.minecraft.advancements.critereon.MinMaxBounds; diff --git a/src/main/java/dev/xkmc/l2core/util/DCStack.java b/src/main/java/dev/xkmc/l2core/util/DCStack.java new file mode 100644 index 0000000..ec7194b --- /dev/null +++ b/src/main/java/dev/xkmc/l2core/util/DCStack.java @@ -0,0 +1,29 @@ +package dev.xkmc.l2core.util; + +import net.minecraft.world.item.ItemStack; + +public final class DCStack { + + private final ItemStack stack; + private final int hashCode; + + public DCStack(ItemStack stack) { + this.stack = stack; + hashCode = stack.hashCode(); + } + + public ItemStack stack(){ + return stack; + } + + @Override + public int hashCode() { + return hashCode; + } + + @Override + public boolean equals(Object obj) { + return obj instanceof DCStack s && hashCode == s.hashCode && stack.equals(s.stack); + } + +}