2 Commits

Author SHA1 Message Date
470e79e3bd 跟进新版1.20.1
Some checks failed
Build / build (push) Failing after 9s
2025-05-19 03:58:35 +08:00
d8c271b246 1.20.1支持
Some checks failed
Build / build (push) Failing after 1m32s
2025-05-16 17:24:20 +08:00
10 changed files with 58 additions and 78 deletions

View File

@ -12,5 +12,5 @@
</envs> </envs>
<shortenClasspath name="ARGS_FILE"/> <shortenClasspath name="ARGS_FILE"/>
<classpathModifications><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-compress\1.27.1\a19151084758e2fbb6b41eddaa88e7b8ff4e6599\commons-compress-1.27.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.3.3\b543467b7ff3c6920539a88ee602d34098628be5\lwjgl-jemalloc-3.3.3.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\com.mojang\text2speech\1.18.11\e853a12cdd6ba4f4836e8f4bf3b37844a13482b6\text2speech-1.18.11.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpclient\4.5.14\1194890e6f56ec29177673f2f12d0b8e627dec98\httpclient-4.5.14.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\com.ibm.icu\icu4j\76.1\215f3a8e936d4069344bd75f2b1368fd58112894\icu4j-76.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpcore\4.4.16\51cf043c87253c9f58b539c9f7e44c8894223850\httpcore-4.4.16.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.3.3\25dd6161988d7e65f71d5065c99902402ee32746\lwjgl-stb-3.3.3.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.3.3\29589b5f87ed335a6c7e7ee6a5775f81f97ecb84\lwjgl-3.3.3.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\commons-codec\commons-codec\1.17.1\973638b7149d333563584137ebf13a691bb60579\commons-codec-1.17.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-freetype\3.3.3\a0db6c84a8becc8ca05f9dbfa985edc348a824c7\lwjgl-freetype-3.3.3.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.3.3\2f6b0147078396a58979125a4c947664e98293a\lwjgl-opengl-3.3.3.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-tinyfd\3.3.3\82d755ca94b102e9ca77283b9e2dc46d1b15fbe5\lwjgl-tinyfd-3.3.3.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.3.3\daada81ceb5fc0c291fbfdd4433cb8d9423577f2\lwjgl-openal-3.3.3.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\com.mojang\patchy\2.2.10\da05971b07cbb379d002cf7eaec6a2048211fefc\patchy-2.2.10.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\commons-logging\commons-logging\1.3.4\b9fc14968d63a8b8a8a2c1885fe3e90564239708\commons-logging-1.3.4.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\com.mojang\blocklist\1.0.10\5c685c5ffa94c4cd39496c7184c1d122e515ecef\blocklist-1.0.10.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.jcraft\jorbis\0.0.17\8872d22b293e8f5d7d56ff92be966e6dc28ebdc6\jorbis-0.0.17.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.3\efa1eb78c5ccd840e9f329717109b5e892d72f8e\lwjgl-glfw-3.3.3.jar"/></classpathModifications></configuration> <classpathModifications><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.3.2\4421d94af68e35dcaa31737a6fc59136a1e61b94\lwjgl-3.3.2.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\com.mojang\blocklist\1.0.10\5c685c5ffa94c4cd39496c7184c1d122e515ecef\blocklist-1.0.10.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl\3.3.1\ae58664f88e18a9bb2c77b063833ca7aaec484cb\lwjgl-3.3.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.3.2\ae5357ed6d934546d3533993ea84c0cfb75eed95\lwjgl-openal-3.3.2.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.3.1\b119297cf8ed01f247abe8685857f8e7fcf5980f\lwjgl-stb-3.3.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.3.2\877e17e39ebcd58a9c956dc3b5b777813de0873a\lwjgl-jemalloc-3.3.2.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-jemalloc\3.3.1\a817bcf213db49f710603677457567c37d53e103\lwjgl-jemalloc-3.3.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\com.mojang\patchy\2.2.10\da05971b07cbb379d002cf7eaec6a2048211fefc\patchy-2.2.10.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-openal\3.3.1\2623a6b8ae1dfcd880738656a9f0243d2e6840bd\lwjgl-openal-3.3.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\commons-codec\commons-codec\1.15\49d94806b6e3dc933dacbd8acb0fdbab8ebd1e5d\commons-codec-1.15.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-stb\3.3.2\a2550795014d622b686e9caac50b14baa87d2c70\lwjgl-stb-3.3.2.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\com.mojang\text2speech\1.17.9\3cad216e3a7f0c19b4b394388bc9ffc446f13b14\text2speech-1.17.9.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.3.2\ee8e95be0b438602038bc1f02dc5e3d011b1b216\lwjgl-opengl-3.3.2.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.1\cbac1b8d30cb4795149c1ef540f912671a8616d0\lwjgl-glfw-3.3.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-opengl\3.3.1\831a5533a21a5f4f81bbc51bb13e9899319b5411\lwjgl-opengl-3.3.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\commons-logging\commons-logging\1.2\4bfc12adfe4842bf07b657f0369c4cb522955686\commons-logging-1.2.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\com.ibm.icu\icu4j\71.1\9e7d3304c23f9ba5cb71915f7cce23231a57a445\icu4j-71.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpclient\4.5.13\e5f6cae5ca7ecaac1ec2827a9e2d65ae2869cada\httpclient-4.5.13.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-tinyfd\3.3.1\ff1914111ef2e3e0110ef2dabc8d8cdaad82347\lwjgl-tinyfd-3.3.1.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-tinyfd\3.3.2\9f65c248dd77934105274fcf8351abb75b34327c\lwjgl-tinyfd-3.3.2.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.apache.commons\commons-compress\1.21\4ec95b60d4e86b5c95a0e919cb172a0af98011ef\commons-compress-1.21.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.lwjgl\lwjgl-glfw\3.3.2\757920418805fb90bfebb3d46b1d9e7669fca2eb\lwjgl-glfw-3.3.2.jar"/><entry exclude="true" path="C:\Users\expvintl\.gradle\caches\modules-2\files-2.1\org.apache.httpcomponents\httpcore\4.4.15\7f2e0c573eaa7a74bac2e89b359e1f73d92a0a1d\httpcore-4.4.15.jar"/></classpathModifications></configuration>
</component> </component>

View File

@ -3,12 +3,12 @@ org.gradle.jvmargs=-Xmx2G
# Fabric Properties # Fabric Properties
# check these on https://modmuss50.me/fabric.html # check these on https://modmuss50.me/fabric.html
minecraft_version=1.21.5 minecraft_version=1.20.1
yarn_mappings=1.21.5+build.1 yarn_mappings=1.20.1+build.10
loader_version=0.16.12 loader_version=0.16.12
#Fabric api #Fabric api
fabric_version=0.119.9+1.21.5 fabric_version=0.92.5+1.20.1
# Mod Properties # Mod Properties
mod_version = 1.0 mod_version = 1.0

View File

@ -4,9 +4,10 @@ import com.expvintl.mctools.FeaturesSettings;
import com.expvintl.mctools.events.MCEventBus; import com.expvintl.mctools.events.MCEventBus;
import com.expvintl.mctools.events.player.PlayerAttackBlockEvent; import com.expvintl.mctools.events.player.PlayerAttackBlockEvent;
import com.expvintl.mctools.events.player.PlayerAttackEntityEvent; import com.expvintl.mctools.events.player.PlayerAttackEntityEvent;
import com.expvintl.mctools.events.player.PlayerBreakBlockEvent;
import com.expvintl.mctools.mixin.interfaces.ClientPlayerInteractionManagerAccessor; import com.expvintl.mctools.mixin.interfaces.ClientPlayerInteractionManagerAccessor;
import com.expvintl.mctools.utils.CommandUtils; import com.expvintl.mctools.utils.CommandUtils;
import com.expvintl.mctools.utils.Utils; import com.google.common.collect.Multimap;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import com.mojang.brigadier.Command; import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.CommandDispatcher;
@ -15,21 +16,16 @@ import com.mojang.brigadier.context.CommandContext;
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.component.DataComponentTypes; import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.component.type.AttributeModifiersComponent;
import net.minecraft.enchantment.Enchantments; import net.minecraft.enchantment.Enchantments;
import net.minecraft.entity.*; import net.minecraft.entity.*;
import net.minecraft.entity.attribute.EntityAttribute; import net.minecraft.entity.attribute.EntityAttribute;
import net.minecraft.entity.attribute.EntityAttributeModifier; import net.minecraft.entity.attribute.EntityAttributeModifier;
import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.item.*; import net.minecraft.item.*;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.registry.tag.EntityTypeTags;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.world.GameMode;
import java.util.function.BiConsumer; import java.util.Collection;
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument;
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;
@ -61,12 +57,13 @@ public class CAutoToolCommand {
return Command.SINGLE_SUCCESS; return Command.SINGLE_SUCCESS;
} }
// @Subscribe // @Subscribe
// private void onBreakBlock(PlayerBreakBlockEvent event){ // private void onBreakBlock(PlayerBreakBlockEvent event){
// if(!Globals.autoTool.get()) return; // if(!Globals.autoTool.get()) return;
// MinecraftClient mc=MinecraftClient.getInstance(); // MinecraftClient mc=MinecraftClient.getInstance();
// if (mc.world == null||mc.player==null) return; // if (mc.world == null||mc.player==null) return;
// } // }
@Subscribe @Subscribe
private void onAttackEntity(PlayerAttackEntityEvent event){ private void onAttackEntity(PlayerAttackEntityEvent event){
if(!FeaturesSettings.INSTANCE.autoTool.getValue()) return; if(!FeaturesSettings.INSTANCE.autoTool.getValue()) return;
@ -75,7 +72,7 @@ public class CAutoToolCommand {
if(FeaturesSettings.INSTANCE.autoToolIncludePlayer.getValue()&&event.target.isPlayer()) return; if(FeaturesSettings.INSTANCE.autoToolIncludePlayer.getValue()&&event.target.isPlayer()) return;
float bestScore=-1; float bestScore=-1;
int slot=-1; int slot=-1;
for(int i=0;i<PlayerInventory.HOTBAR_SIZE;i++) { for(int i=0;i<9;i++) {
ItemStack item = event.player.getInventory().getStack(i); ItemStack item = event.player.getInventory().getStack(i);
if(!isSwordItem(item.getItem())&&!isToolItem(item.getItem())) continue; if(!isSwordItem(item.getItem())&&!isToolItem(item.getItem())) continue;
float score=getWeaponScore(event.target, item); float score=getWeaponScore(event.target, item);
@ -91,7 +88,7 @@ public class CAutoToolCommand {
//低耐久测试 //低耐久测试
if(!isLowDurability(currentItem)) { if(!isLowDurability(currentItem)) {
//切换过去 //切换过去
event.player.getInventory().setSelectedSlot(slot); event.player.getInventory().selectedSlot=slot;
MinecraftClient mc=MinecraftClient.getInstance(); MinecraftClient mc=MinecraftClient.getInstance();
if(mc.interactionManager!=null) { if(mc.interactionManager!=null) {
((ClientPlayerInteractionManagerAccessor) mc.interactionManager).syncSelectedSlot(); ((ClientPlayerInteractionManagerAccessor) mc.interactionManager).syncSelectedSlot();
@ -105,7 +102,6 @@ public class CAutoToolCommand {
//自动工具 //自动工具
MinecraftClient mc=MinecraftClient.getInstance(); MinecraftClient mc=MinecraftClient.getInstance();
if (mc.world == null||mc.player==null) return; if (mc.world == null||mc.player==null) return;
if(mc.player.getGameMode() != GameMode.SURVIVAL) return; //跳过不符合条件的游戏模式
BlockState state= mc.world.getBlockState(event.blockPos); BlockState state= mc.world.getBlockState(event.blockPos);
//跳过不可破坏 //跳过不可破坏
if(state.getHardness(mc.world, event.blockPos) < 0) return; if(state.getHardness(mc.world, event.blockPos) < 0) return;
@ -114,7 +110,7 @@ public class CAutoToolCommand {
//工具槽 //工具槽
int slot=-1; int slot=-1;
//遍历每一个物品槽 //遍历每一个物品槽
for(int i = 0; i< PlayerInventory.HOTBAR_SIZE; i++){ for(int i=0;i<9;i++){
ItemStack item = mc.player.getInventory().getStack(i); ItemStack item = mc.player.getInventory().getStack(i);
float score= getToolsScore(item,state); float score= getToolsScore(item,state);
if(score<=0) continue; if(score<=0) continue;
@ -129,7 +125,7 @@ public class CAutoToolCommand {
//确定已经选择好了工具就切换 //确定已经选择好了工具就切换
if(!isLowDurability(currentItem)) { if(!isLowDurability(currentItem)) {
//切换过去 //切换过去
mc.player.getInventory().setSelectedSlot(slot); mc.player.getInventory().selectedSlot=slot;
if(mc.interactionManager!=null) { if(mc.interactionManager!=null) {
((ClientPlayerInteractionManagerAccessor) mc.interactionManager).syncSelectedSlot(); ((ClientPlayerInteractionManagerAccessor) mc.interactionManager).syncSelectedSlot();
} }
@ -187,11 +183,13 @@ public class CAutoToolCommand {
return true; return true;
} }
// 海晶灯 if (block == Blocks.GLOWSTONE || // 荧石
return block == Blocks.GLOWSTONE || // 荧石
block == Blocks.MELON || // 西瓜 block == Blocks.MELON || // 西瓜
block == Blocks.GRAVEL || // 沙砾 (影响燧石掉落概率) block == Blocks.GRAVEL || // 沙砾 (影响燧石掉落概率)
block == Blocks.SEA_LANTERN; block == Blocks.SEA_LANTERN){ // 海晶灯
return true;
}
return false;
} }
public float getToolsScore(ItemStack item, BlockState state){ public float getToolsScore(ItemStack item, BlockState state){
float score=0; float score=0;
@ -200,20 +198,20 @@ public class CAutoToolCommand {
score+=item.getMiningSpeedMultiplier(state)*2; score+=item.getMiningSpeedMultiplier(state)*2;
//附魔加分 //附魔加分
//耐久 //耐久
score+= Utils.GetEnchantLevel(Enchantments.UNBREAKING, item); score+= EnchantmentHelper.getLevel(Enchantments.UNBREAKING, item);
//效率 //效率
score+=Utils.GetEnchantLevel(Enchantments.EFFICIENCY,item); score+=EnchantmentHelper.getLevel(Enchantments.EFFICIENCY,item);
//经验修补 //经验修补
score+=Utils.GetEnchantLevel(Enchantments.MENDING,item); score+=EnchantmentHelper.getLevel(Enchantments.MENDING,item);
if(isBlockFortune(state.getBlock())){ if(isBlockFortune(state.getBlock())){
score+=Utils.GetEnchantLevel(Enchantments.FORTUNE,item);//时运 score+=EnchantmentHelper.getLevel(Enchantments.FORTUNE,item);//时运
} }
if (isSwordItem(item.getItem()) && (state.getBlock() instanceof BambooBlock|| state.getBlock() instanceof BambooShootBlock)) { if (isSwordItem(item.getItem()) && (state.getBlock() instanceof BambooBlock)) {
if((item.getItem().getComponents().get(DataComponentTypes.TOOL)!=null)){ if(item.getItem() instanceof ToolItem tool){
//根据挖掘等级加分 //根据挖掘等级加分
score += 90 + item.getMiningSpeedMultiplier(state); score += 90 + tool.getMaterial().getMiningSpeedMultiplier();
} }
} }
} }
@ -224,33 +222,31 @@ public class CAutoToolCommand {
//剑优先 //剑优先
if (isSwordItem(item.getItem())) damageScore += 100; if (isSwordItem(item.getItem())) damageScore += 100;
//计算物品的基础伤害属性(较为复杂) //计算物品的基础伤害属性(较为复杂)
AttributeModifiersComponent comp=item.getOrDefault(DataComponentTypes.ATTRIBUTE_MODIFIERS, AttributeModifiersComponent.DEFAULT); Multimap<EntityAttribute, EntityAttributeModifier> modifiers = item.getAttributeModifiers(EquipmentSlot.MAINHAND);
final float[] damageHolder = {0.0f}; Collection<EntityAttributeModifier> damageModifiers = modifiers.get(EntityAttributes.GENERIC_ATTACK_DAMAGE);
BiConsumer<RegistryEntry<EntityAttribute>, EntityAttributeModifier> baseDamage=(attentry, modify)->{ for (EntityAttributeModifier modifier : damageModifiers) {
if(attentry.matches(EntityAttributes.ATTACK_DAMAGE)){ if (modifier.getOperation() == EntityAttributeModifier.Operation.ADDITION) {
//计算基础伤害 damageScore+=(float) modifier.getValue();
damageHolder [0]= (float)modify.value(); break;
}
} }
};
comp.applyModifiers(EquipmentSlot.MAINHAND,baseDamage);//计算主手时的伤害
damageScore+=damageHolder[0];
//节肢杀手 //节肢杀手
EntityType<?> id=ent.getType(); EntityType<?> id=ent.getType();
if(id==EntityType.SPIDER||id==EntityType.CAVE_SPIDER||id==EntityType.SILVERFISH||id==EntityType.ENDERMITE||id==EntityType.BEE) { 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; damageScore += EnchantmentHelper.getLevel(Enchantments.BANE_OF_ARTHROPODS, item) * 3;
} }
//亡灵杀手(这伤害通常更高) //亡灵杀手(这伤害通常更高)
if(ent.getType().isIn(EntityTypeTags.UNDEAD)){ if(((LivingEntity)ent).getGroup()==EntityGroup.UNDEAD){
damageScore+=Utils.GetEnchantLevel(Enchantments.SMITE,item)*3;// 3倍 damageScore+=EnchantmentHelper.getLevel(Enchantments.SMITE,item)*3;// 3倍
} }
//锋利加分 //锋利加分
damageScore += Utils.GetEnchantLevel(Enchantments.SHARPNESS, item) * 2; damageScore += EnchantmentHelper.getLevel(Enchantments.SHARPNESS, item) * 2;
//精修 //精修
damageScore += Utils.GetEnchantLevel(Enchantments.MENDING, item); damageScore += EnchantmentHelper.getLevel(Enchantments.MENDING, item);
//火焰附加 //火焰附加
damageScore += Utils.GetEnchantLevel(Enchantments.FIRE_ASPECT, item); damageScore += EnchantmentHelper.getLevel(Enchantments.FIRE_ASPECT, item);
//击退 //击退
damageScore += Utils.GetEnchantLevel(Enchantments.KNOCKBACK, item); damageScore += EnchantmentHelper.getLevel(Enchantments.KNOCKBACK, item);
return damageScore; return damageScore;
} }
//停用低耐久度 //停用低耐久度
@ -266,6 +262,6 @@ public class CAutoToolCommand {
item == Items.IRON_AXE || item == Items.IRON_SHOVEL || item == Items.IRON_AXE || item == Items.IRON_SHOVEL ||
item == Items.IRON_HOE; item == Items.IRON_HOE;
return !(isWooden||isStone||isIron) //忽略木/石/铁工具 return !(isWooden||isStone||isIron) //忽略木/石/铁工具
&&(itemStack.getMaxDamage() - itemStack.getDamage()) < (itemStack.getMaxDamage() * 10 / 100); &&(itemStack.getMaxDamage() - itemStack.getDamage()) < (itemStack.getMaxDamage() * 2 / 100);
} }
} }

View File

@ -9,14 +9,14 @@ import net.minecraft.text.Text;
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;
public class CFullbirghtCommand{ public class CFullbirghtCommand {
public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher){ public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher) {
dispatcher.register(literal("cfullbirght").executes(CFullbirghtCommand::execute)); dispatcher.register(literal("cfullbirght").executes(CFullbirghtCommand::execute));
} }
private static int execute(CommandContext<FabricClientCommandSource> context) { private static int execute(CommandContext<FabricClientCommandSource> context) {
((SimpleOptionAccessor)(Object)context.getSource().getClient().options.getGamma()).forceSetValue(32767.0); ((SimpleOptionAccessor) (Object) context.getSource().getClient().options.getGamma()).forceSetValue(32767.0);
context.getSource().getPlayer().sendMessage(Text.literal("已应用高亮"),false); context.getSource().getPlayer().sendMessage(Text.literal("已应用高亮"), false);
return Command.SINGLE_SUCCESS; return Command.SINGLE_SUCCESS;
} }

View File

@ -1,19 +1,15 @@
package com.expvintl.mctools.mixin.client; package com.expvintl.mctools.mixin.client;
import com.expvintl.mctools.modules.CameraZoom; import com.expvintl.mctools.modules.CameraZoom;
import com.expvintl.mctools.utils.Utils;
import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
import net.minecraft.util.math.MathHelper;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
@Mixin(GameRenderer.class) @Mixin(GameRenderer.class)
public class GameRendererMixin { public class GameRendererMixin {
@ModifyReturnValue(method = "getFov",at=@At("RETURN")) @ModifyReturnValue(method = "getFov",at=@At("RETURN"))
private float getFov(float origin){ private double getFov(double original){
return CameraZoom.INSTANCE.isZoom?20.f:origin; return CameraZoom.INSTANCE.isZoom?20.f:original;
} }
} }

View File

@ -44,10 +44,10 @@ public class MCInfo {
return timeString.toString(); return timeString.toString();
} }
public static void drawHUD(DrawContext drawContext, RenderTickCounter v) { public static void drawHUD(DrawContext drawContext, float v) {
MinecraftClient mc=MinecraftClient.getInstance(); MinecraftClient mc=MinecraftClient.getInstance();
//跳过调试 //跳过调试
if(mc.getDebugHud().shouldShowDebugHud()||mc.options.hudHidden) return; if(mc.options.debugEnabled||mc.options.hudHidden) return;
if(mc.world!=null&&mc.player!=null) { if(mc.world!=null&&mc.player!=null) {
DrawUtils.leftTextY =1; DrawUtils.leftTextY =1;
int selfPing=0; int selfPing=0;

View File

@ -10,10 +10,10 @@ import net.minecraft.entity.effect.StatusEffectInstance;
import java.util.Collection; import java.util.Collection;
public class PotionInfo { public class PotionInfo {
public static void drawHUD(DrawContext drawContext, RenderTickCounter v) { public static void drawHUD(DrawContext drawContext, float v) {
MinecraftClient mc=MinecraftClient.getInstance(); MinecraftClient mc=MinecraftClient.getInstance();
//跳过调试 //跳过调试
if(mc.getDebugHud().shouldShowDebugHud()||mc.options.hudHidden) return; if(mc.options.debugEnabled||mc.options.hudHidden) return;
if(mc.world!=null&&mc.player!=null) { if(mc.world!=null&&mc.player!=null) {
DrawUtils.rightBottomY=1; DrawUtils.rightBottomY=1;

View File

@ -44,7 +44,7 @@ public class Utils {
public static String getCurrentDimensionName() { public static String getCurrentDimensionName() {
if (mc.world != null) { if (mc.world != null) {
String dismenName = mc.world.getDimensionEntry().getIdAsString(); String dismenName = mc.world.getDimensionKey().getValue().toString();
switch (dismenName) { switch (dismenName) {
case "minecraft:overworld": case "minecraft:overworld":
return "主世界"; return "主世界";
@ -199,18 +199,6 @@ public class Utils {
return "未知"; return "未知";
} }
public static int GetEnchantLevel(RegistryKey<Enchantment> enchantName, ItemStack item){
//跳过附魔书
if(item.getItem()== Items.ENCHANTED_BOOK) return 0;
Set<Object2IntMap.Entry<RegistryEntry<Enchantment>>> enchants=item.getEnchantments().getEnchantmentEntries();
for(Object2IntMap.Entry<RegistryEntry<Enchantment>> entry:enchants){
//返回找到的附魔等级
if(entry.getKey().matchesKey(enchantName)) {
return entry.getIntValue();
}
}
return 0;
}
public static void rightClick() { public static void rightClick() {
((MinecraftClientAccessor) mc).doItemUse(); ((MinecraftClientAccessor) mc).doItemUse();
} }
@ -245,7 +233,7 @@ public class Utils {
if(sender==null) return; if(sender==null) return;
PlayerListEntry entry = mc.getNetworkHandler().getPlayerListEntry(sender.getId()); PlayerListEntry entry = mc.getNetworkHandler().getPlayerListEntry(sender.getId());
if (entry == null) return; if (entry == null) return;
PlayerSkinDrawer.draw(draw,entry.getSkinTextures(),0,y,8); PlayerSkinDrawer.draw(draw,entry.getSkinTexture(),0,y,8);
draw.getMatrices().translate(10, 0, 0); draw.getMatrices().translate(10, 0, 0);
} }
public static GameProfile getChatSender(String text){ public static GameProfile getChatSender(String text){

View File

@ -21,6 +21,6 @@
"depends": { "depends": {
"fabricloader": ">=0.8.0", "fabricloader": ">=0.8.0",
"fabric": "*", "fabric": "*",
"minecraft": "~1.21" "minecraft": "~1.20.1"
} }
} }

View File

@ -2,7 +2,7 @@
"required": true, "required": true,
"minVersion": "0.8", "minVersion": "0.8",
"package": "com.expvintl.mctools.mixin", "package": "com.expvintl.mctools.mixin",
"compatibilityLevel": "JAVA_21", "compatibilityLevel": "JAVA_17",
"mixins": [ "mixins": [
"hud.ChatHudMixin", "hud.ChatHudMixin",
"hud.PlayerListHudMixin", "hud.PlayerListHudMixin",