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); }
}
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); }
}