From f68046edaee3a5f49d828a9e5154b63fd82e979d Mon Sep 17 00:00:00 2001 From: expvintl Date: Thu, 10 Apr 2025 17:22:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E4=BA=A1=E7=81=B5=E5=92=8C=E8=8A=82?= =?UTF-8?q?=E8=82=A2=E6=B7=BB=E5=8A=A0=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mctools/commands/CAutoToolCommand.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java b/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java index 288dcd2..5b4f564 100644 --- a/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java +++ b/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java @@ -20,14 +20,15 @@ import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.AttributeModifiersComponent; -import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.enchantment.Enchantments; -import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.*; import net.minecraft.entity.attribute.EntityAttribute; import net.minecraft.entity.attribute.EntityAttributeModifier; import net.minecraft.entity.attribute.EntityAttributes; +import net.minecraft.entity.mob.HostileEntity; import net.minecraft.item.*; import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.tag.EntityTypeTags; import net.minecraft.text.Text; import java.util.function.BiConsumer; @@ -70,7 +71,7 @@ public class CAutoToolCommand { for(int i=0;i<9;i++) { ItemStack item = event.player.getInventory().getStack(i); if(!isSwordItem(item.getItem())&&!isToolItem(item.getItem())) continue; - float score=getWeaponScore(item); + float score=getWeaponScore(event.target, item); if(score<=0) continue; //选出最好分数的工具 if(score>bestScore){ @@ -157,10 +158,11 @@ public class CAutoToolCommand { } return score; } - public float getWeaponScore(ItemStack item) { + public float getWeaponScore(Entity ent, ItemStack item) { float damageScore = 0; //剑优先 if (isSwordItem(item.getItem())) damageScore += 100; + //计算物品的基础伤害属性(较为复杂) AttributeModifiersComponent comp=item.getOrDefault(DataComponentTypes.ATTRIBUTE_MODIFIERS, AttributeModifiersComponent.DEFAULT); final float[] damageHolder = {0.0f}; BiConsumer, EntityAttributeModifier> baseDamage=(attentry, modify)->{ @@ -171,14 +173,23 @@ public class CAutoToolCommand { }; comp.applyModifiers(EquipmentSlot.MAINHAND,baseDamage); damageScore+=damageHolder[0]; + //节肢杀手 + EntityType id=ent.getType(); + if(id==EntityType.SPIDER||id==EntityType.CAVE_SPIDER||id==EntityType.SILVERFISH||id==EntityType.ENDERMITE||id==EntityType.BEE) { + damageScore += Utils.GetEnchantLevel(Enchantments.BANE_OF_ARTHROPODS, item) * 3; + } + //亡灵杀手(这伤害通常更高) + if(ent.getType().isIn(EntityTypeTags.UNDEAD)){ + damageScore+=Utils.GetEnchantLevel(Enchantments.SMITE,item)*3;// 3倍 + } //锋利加分 damageScore += Utils.GetEnchantLevel(Enchantments.SHARPNESS, item) * 2; //精修 damageScore += Utils.GetEnchantLevel(Enchantments.MENDING, item); //火焰附加 - damageScore += Utils.GetEnchantLevel(Enchantments.FIRE_ASPECT, item) * 3; + damageScore += Utils.GetEnchantLevel(Enchantments.FIRE_ASPECT, item); //击退 - damageScore += Utils.GetEnchantLevel(Enchantments.KNOCKBACK, item) * 2; + damageScore += Utils.GetEnchantLevel(Enchantments.KNOCKBACK, item); return damageScore; } //停用低耐久度