diff --git a/gradle.properties b/gradle.properties index b63ffdb..25272d2 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.7-pre9 +mod_version=3.0.7+6 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/init/reg/ench/EnchHelper.java b/src/main/java/dev/xkmc/l2core/init/reg/ench/EnchHelper.java new file mode 100644 index 0000000..3f75c97 --- /dev/null +++ b/src/main/java/dev/xkmc/l2core/init/reg/ench/EnchHelper.java @@ -0,0 +1,18 @@ +package dev.xkmc.l2core.init.reg.ench; + +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import net.neoforged.neoforge.common.CommonHooks; + +public class EnchHelper { + + public static int getLv(ItemStack stack, ResourceKey key) { + var reg = CommonHooks.resolveLookup(Registries.ENCHANTMENT); + if (reg == null) return 0; + var holder = reg.get(key); + return holder.map(stack::getEnchantmentLevel).orElse(0); + } + +} diff --git a/src/main/java/dev/xkmc/l2core/init/reg/ench/EnchReg.java b/src/main/java/dev/xkmc/l2core/init/reg/ench/EnchReg.java index a7fd4bc..926ed97 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/ench/EnchReg.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/ench/EnchReg.java @@ -38,7 +38,7 @@ public class EnchReg { private final DeferredRegister> reg; private final DeferredRegister legacy; private final L2Registrate pvd; - + private final List parent = new ArrayList<>(); private final List list = new ArrayList<>(); private EnchReg(Reg reg, L2Registrate pvd) { @@ -103,7 +103,12 @@ public class EnchReg { )); } + public void addParent(EnchReg reg) { + parent.add(reg); + } + public void build(BootstrapContext ctx) { + for (var e : parent) e.build(ctx); for (var e : list) ctx.register(e.id(), e.builder().get().build(ctx, e.id().location())); } 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 21cf45d..ec0dcf1 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 @@ -65,6 +65,10 @@ public record DCReg(DeferredRegister> reg) { return reg(id, Codec.DOUBLE, ByteBufCodecs.DOUBLE, false); } + public DCVal floatVal(String id) { + return reg(id, Codec.FLOAT, ByteBufCodecs.FLOAT, false); + } + public DCVal longVal(String id) { return reg(id, Codec.LONG, ByteBufCodecs.VAR_LONG, false); } diff --git a/src/main/java/dev/xkmc/l2core/util/Proxy.java b/src/main/java/dev/xkmc/l2core/util/Proxy.java index a09a977..a84970f 100644 --- a/src/main/java/dev/xkmc/l2core/util/Proxy.java +++ b/src/main/java/dev/xkmc/l2core/util/Proxy.java @@ -4,12 +4,14 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.RegistryAccess; import net.minecraft.server.MinecraftServer; +import net.minecraft.world.level.Level; import net.neoforged.api.distmarker.Dist; import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.neoforge.server.ServerLifecycleHooks; import javax.annotation.Nullable; import java.util.Optional; +import java.util.function.BiConsumer; public class Proxy { @@ -21,6 +23,14 @@ public class Proxy { return ServerLifecycleHooks.getCurrentServer().registryAccess(); } + @Nullable + public static Level getLevel() { + if (FMLEnvironment.dist == Dist.CLIENT) { + return Minecraft.getInstance().level; + } + return ServerLifecycleHooks.getCurrentServer().overworld(); + } + public static Optional getServer() { return Optional.ofNullable(ServerLifecycleHooks.getCurrentServer()); } diff --git a/src/main/java/dev/xkmc/l2core/util/TooltipHelper.java b/src/main/java/dev/xkmc/l2core/util/TooltipHelper.java new file mode 100644 index 0000000..e9e4621 --- /dev/null +++ b/src/main/java/dev/xkmc/l2core/util/TooltipHelper.java @@ -0,0 +1,22 @@ +package dev.xkmc.l2core.util; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import net.neoforged.fml.loading.FMLEnvironment; + +import java.util.function.Consumer; + +public record TooltipHelper(Level level, boolean shift, boolean alt) { + + public static void addClient(Item.TooltipContext ctx, TooltipFlag flag, Consumer action) { + if (!FMLEnvironment.dist.isClient()) return; + if (ctx.registries() == null) return; + var level = Minecraft.getInstance().level; + if (level == null) return; + action.accept(new TooltipHelper(level, Screen.hasShiftDown(), Screen.hasAltDown())); + } + +}