XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

MyDimension-Lord

【我的世界】我的维度附属模组:维度之主

公开
关注 0 Fork 0 Star 0
UTF-8
package com.xfestudio.mydimensionlord.platform;

import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.SimpleContainer;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.item.enchantment.EnchantmentHelper;

/** Small vanilla API adapter used by the loader integration GameTests. */
public final class EquipmentTestBridge {
    private EquipmentTestBridge() {}
    public static boolean edible(ItemStack stack) { return stack.isEdible(); }
    public static ItemStack craft(ServerLevel level, int width, int height, ItemStack... cells) {
        var menu = new net.minecraft.world.inventory.AbstractContainerMenu(null, -1) {
            public ItemStack quickMoveStack(net.minecraft.world.entity.player.Player player, int slot) { return ItemStack.EMPTY; }
            public boolean stillValid(net.minecraft.world.entity.player.Player player) { return true; }
        };
        var input = new net.minecraft.world.inventory.TransientCraftingContainer(menu, width, height);
        for (int i = 0; i < cells.length; i++) input.setItem(i, cells[i]);
        return level.getServer().getRecipeManager().getRecipeFor(RecipeType.CRAFTING, input, level)
                .map(recipe -> recipe.assemble(input, level.registryAccess())).orElse(ItemStack.EMPTY);
    }
    public static boolean hurt(net.minecraft.world.entity.player.Player player, net.minecraft.world.damagesource.DamageSource source, float damage) {
        return player.hurt(source, damage);
    }
    public static ItemStack upgrade(ServerLevel level, ItemStack template, ItemStack base, ItemStack addition) {
        var input = new SimpleContainer(template, base, addition);
        return level.getServer().getRecipeManager().getRecipeFor(RecipeType.SMITHING, input, level)
                .map(recipe -> recipe.assemble(input, level.registryAccess())).orElse(ItemStack.EMPTY);
    }
    public static void mark(ServerLevel level, ItemStack stack) {
        stack.setDamageValue(123);
        stack.setHoverName(Component.literal("Legacy lord gear"));
        stack.enchant(Enchantments.UNBREAKING, 3);
        stack.getOrCreateTag().putString("LordUpgradeMarker", "kept");
    }
    public static boolean preserved(ServerLevel level, ItemStack stack) {
        return stack.getDamageValue() == 123 && stack.getHoverName().getString().equals("Legacy lord gear")
                && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.UNBREAKING, stack) == 3
                && stack.getOrCreateTag().getString("LordUpgradeMarker").equals("kept");
    }
    public static double attackDamage(ItemStack stack) {
        return 1 + stack.getAttributeModifiers(net.minecraft.world.entity.EquipmentSlot.MAINHAND)
                .get(net.minecraft.world.entity.ai.attributes.Attributes.ATTACK_DAMAGE).stream()
                .mapToDouble(net.minecraft.world.entity.ai.attributes.AttributeModifier::getAmount).sum();
    }
    public static boolean repairs(ItemStack stack, ItemStack material) { return stack.getItem().isValidRepairItem(stack, material); }
    public static void silk(ServerLevel level, ItemStack stack) { stack.enchant(Enchantments.SILK_TOUCH, 1); }
}