ench helper

This commit is contained in:
lcy0x1
2024-08-03 11:37:37 +08:00
parent b897dbc710
commit 483d639bba
6 changed files with 61 additions and 2 deletions

View File

@@ -18,7 +18,7 @@ loader_version_range=[2,)
mod_id=l2core mod_id=l2core
mod_name=L2Core mod_name=L2Core
mod_license=LGPL-2.1 mod_license=LGPL-2.1
mod_version=3.0.7-pre9 mod_version=3.0.7+6
mod_group_id=dev.xkmc mod_group_id=dev.xkmc
mod_authors=lcy0x1 mod_authors=lcy0x1
mod_description=Core Library mod for all L2 mods mod_description=Core Library mod for all L2 mods

View File

@@ -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<Enchantment> key) {
var reg = CommonHooks.resolveLookup(Registries.ENCHANTMENT);
if (reg == null) return 0;
var holder = reg.get(key);
return holder.map(stack::getEnchantmentLevel).orElse(0);
}
}

View File

@@ -38,7 +38,7 @@ public class EnchReg {
private final DeferredRegister<DataComponentType<?>> reg; private final DeferredRegister<DataComponentType<?>> reg;
private final DeferredRegister<LegacyEnchantment> legacy; private final DeferredRegister<LegacyEnchantment> legacy;
private final L2Registrate pvd; private final L2Registrate pvd;
private final List<EnchReg> parent = new ArrayList<>();
private final List<EnchVal.Impl> list = new ArrayList<>(); private final List<EnchVal.Impl> list = new ArrayList<>();
private EnchReg(Reg reg, L2Registrate pvd) { 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<Enchantment> ctx) { public void build(BootstrapContext<Enchantment> ctx) {
for (var e : parent) e.build(ctx);
for (var e : list) ctx.register(e.id(), e.builder().get().build(ctx, e.id().location())); for (var e : list) ctx.register(e.id(), e.builder().get().build(ctx, e.id().location()));
} }

View File

@@ -65,6 +65,10 @@ public record DCReg(DeferredRegister<DataComponentType<?>> reg) {
return reg(id, Codec.DOUBLE, ByteBufCodecs.DOUBLE, false); return reg(id, Codec.DOUBLE, ByteBufCodecs.DOUBLE, false);
} }
public DCVal<Float> floatVal(String id) {
return reg(id, Codec.FLOAT, ByteBufCodecs.FLOAT, false);
}
public DCVal<Long> longVal(String id) { public DCVal<Long> longVal(String id) {
return reg(id, Codec.LONG, ByteBufCodecs.VAR_LONG, false); return reg(id, Codec.LONG, ByteBufCodecs.VAR_LONG, false);
} }

View File

@@ -4,12 +4,14 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
import net.minecraft.core.RegistryAccess; import net.minecraft.core.RegistryAccess;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
import net.minecraft.world.level.Level;
import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.Dist;
import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.fml.loading.FMLEnvironment;
import net.neoforged.neoforge.server.ServerLifecycleHooks; import net.neoforged.neoforge.server.ServerLifecycleHooks;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Optional; import java.util.Optional;
import java.util.function.BiConsumer;
public class Proxy { public class Proxy {
@@ -21,6 +23,14 @@ public class Proxy {
return ServerLifecycleHooks.getCurrentServer().registryAccess(); 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<MinecraftServer> getServer() { public static Optional<MinecraftServer> getServer() {
return Optional.ofNullable(ServerLifecycleHooks.getCurrentServer()); return Optional.ofNullable(ServerLifecycleHooks.getCurrentServer());
} }

View File

@@ -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<TooltipHelper> 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()));
}
}