diff --git a/.github/workflows/ci_build.yml b/.github/workflows/ci_build.yml
index 5068440..1fe3acb 100644
--- a/.github/workflows/ci_build.yml
+++ b/.github/workflows/ci_build.yml
@@ -1,4 +1,4 @@
-name: Build1.21
+name: Build
on: push
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index b589d56..b86273d 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 9d0bbd3..031d9d3 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,7 +1,6 @@
-
-
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 55c33c0..3b1026f 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,14 +2,8 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations/Minecraft_Server.xml b/.idea/runConfigurations/Minecraft_Server.xml
index c1b3bf6..5870600 100644
--- a/.idea/runConfigurations/Minecraft_Server.xml
+++ b/.idea/runConfigurations/Minecraft_Server.xml
@@ -12,5 +12,5 @@
-
+
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index 0168541..ae3a4c1 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -3,12 +3,12 @@ org.gradle.jvmargs=-Xmx2G
# Fabric Properties
# check these on https://modmuss50.me/fabric.html
- minecraft_version=1.21
- yarn_mappings=1.21+build.9
- loader_version=0.16.0
+ minecraft_version=1.21.5
+ yarn_mappings=1.21.5+build.1
+ loader_version=0.16.12
#Fabric api
- fabric_version=0.100.8+1.21
+ fabric_version=0.119.9+1.21.5
# Mod Properties
mod_version = 1.0
diff --git a/src/main/java/com/expvintl/mctools/commands/CAutoFishCommand.java b/src/main/java/com/expvintl/mctools/commands/CAutoFishCommand.java
index e739b8c..bfdbe83 100644
--- a/src/main/java/com/expvintl/mctools/commands/CAutoFishCommand.java
+++ b/src/main/java/com/expvintl/mctools/commands/CAutoFishCommand.java
@@ -30,9 +30,9 @@ public class CAutoFishCommand {
private static int execute(CommandContext context) {
Globals.autoFish.set(context.getArgument("开关", Boolean.class));
if(Globals.autoFish.get()){
- context.getSource().getPlayer().sendMessage(Text.literal("已启用自动钓鱼!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已启用自动钓鱼!"),false);
}else{
- context.getSource().getPlayer().sendMessage(Text.literal("已禁用自动钓鱼!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已禁用自动钓鱼!"),false);
}
return Command.SINGLE_SUCCESS;
}
diff --git a/src/main/java/com/expvintl/mctools/commands/CAutoRespawnCommand.java b/src/main/java/com/expvintl/mctools/commands/CAutoRespawnCommand.java
index 0254dff..57c7851 100644
--- a/src/main/java/com/expvintl/mctools/commands/CAutoRespawnCommand.java
+++ b/src/main/java/com/expvintl/mctools/commands/CAutoRespawnCommand.java
@@ -28,9 +28,9 @@ public class CAutoRespawnCommand {
private static int execute(CommandContext context) {
Globals.autoRespawn.set(context.getArgument("开关", Boolean.class));
if(Globals.autoRespawn.get()){
- context.getSource().getPlayer().sendMessage(Text.literal("已启用自动重生!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已启用自动重生!"),false);
}else{
- context.getSource().getPlayer().sendMessage(Text.literal("已禁用自动重生!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已禁用自动重生!"),false);
}
return Command.SINGLE_SUCCESS;
}
diff --git a/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java b/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java
index 3e6deb4..1537e2e 100644
--- a/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java
+++ b/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java
@@ -26,6 +26,8 @@ import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.*;
import net.minecraft.text.Text;
+import java.awt.*;
+
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument;
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;
@@ -41,9 +43,9 @@ public class CAutoToolCommand {
private static int execute(CommandContext context) {
Globals.autoTool.set(context.getArgument("开关", Boolean.class));
if(Globals.autoTool.get()){
- context.getSource().getPlayer().sendMessage(Text.literal("已启用智能工具!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已启用智能工具!"),false);
}else{
- context.getSource().getPlayer().sendMessage(Text.literal("已禁用智能工具!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已禁用智能工具!"),false);
}
return Command.SINGLE_SUCCESS;
}
@@ -52,11 +54,12 @@ public class CAutoToolCommand {
if(!Globals.autoTool.get()) return;
MinecraftClient mc=MinecraftClient.getInstance();
if (mc.world == null||mc.player==null) return;
- if (lastSlot!=-1){
- //破坏方块后切换回去
- mc.player.getInventory().selectedSlot=lastSlot;
- lastSlot=-1;
- }
+ //TODO: 因bug禁用
+// if (lastSlot!=-1){
+// //破坏方块后切换回去
+// mc.player.getInventory().setSelectedSlot(lastSlot);
+// lastSlot=-1;
+// }
}
@Subscribe
private void onAttackEntity(PlayerAttackEntityEvent event){
@@ -80,7 +83,7 @@ public class CAutoToolCommand {
//低耐久测试
if(!lowDurability(currentItem)) {
//切换过去
- event.player.getInventory().selectedSlot = slot;
+ event.player.getInventory().setSelectedSlot(slot);
MinecraftClient mc=MinecraftClient.getInstance();
if(mc.interactionManager!=null) {
((ClientPlayerInteractionManagerAccessor) mc.interactionManager).syncSelectedSlot();
@@ -116,17 +119,27 @@ public class CAutoToolCommand {
//确定已经选择好了工具就切换
if(!lowDurability(currentItem)) {
//记住上一次的槽方便恢复
- lastSlot=mc.player.getInventory().selectedSlot;
+ lastSlot=mc.player.getInventory().getSelectedSlot();
//切换过去
- mc.player.getInventory().selectedSlot = slot;
+ mc.player.getInventory().setSelectedSlot(slot);
if(mc.interactionManager!=null) {
((ClientPlayerInteractionManagerAccessor) mc.interactionManager).syncSelectedSlot();
}
}
}
+ public boolean isSwordItem(Item item){
+ return item==Items.STONE_SWORD||item==Items.DIAMOND_SWORD||item==Items.GOLDEN_SWORD||item==Items.IRON_SWORD||item==Items.NETHERITE_SWORD||item==Items.WOODEN_SWORD;
+ }
+ public boolean isToolItem(Item item){
+ return item == Items.WOODEN_PICKAXE || item == Items.STONE_PICKAXE || item == Items.IRON_PICKAXE || item == Items.GOLDEN_PICKAXE || item == Items.DIAMOND_PICKAXE || item == Items.NETHERITE_PICKAXE
+ || item == Items.WOODEN_AXE || item == Items.STONE_AXE || item == Items.IRON_AXE || item == Items.GOLDEN_AXE || item == Items.DIAMOND_AXE || item == Items.NETHERITE_AXE
+ || item == Items.WOODEN_SHOVEL || item == Items.STONE_SHOVEL || item == Items.IRON_SHOVEL || item == Items.GOLDEN_SHOVEL || item == Items.DIAMOND_SHOVEL || item == Items.NETHERITE_SHOVEL
+ || item == Items.WOODEN_HOE || item == Items.STONE_HOE || item == Items.IRON_HOE || item == Items.GOLDEN_HOE || item == Items.DIAMOND_HOE || item == Items.NETHERITE_HOE
+ || item == Items.WOODEN_SWORD || item == Items.STONE_SWORD || item == Items.IRON_SWORD || item == Items.GOLDEN_SWORD || item == Items.DIAMOND_SWORD || item == Items.NETHERITE_SWORD;
+ }
public float getToolsScore(ItemStack item, BlockState state){
float score=0;
- if(item.getItem() instanceof ToolItem || item.getItem() instanceof ShearsItem){
+ if(isToolItem(item.getItem())||item.getItem() instanceof ShearsItem){
//根据挖掘速度提升评分
score+=item.getMiningSpeedMultiplier(state)*30;
//附魔加分
@@ -136,10 +149,10 @@ public class CAutoToolCommand {
score+=Utils.GetEnchantLevel(Enchantments.EFFICIENCY,item);
//经验修补
score+=Utils.GetEnchantLevel(Enchantments.MENDING,item);
- if (item.getItem() instanceof SwordItem item1 && (state.getBlock() instanceof BambooBlock|| state.getBlock() instanceof BambooShootBlock)) {
- if((item1.getComponents().get(DataComponentTypes.TOOL)!=null)){
+ if (isSwordItem(item.getItem()) && (state.getBlock() instanceof BambooBlock|| state.getBlock() instanceof BambooShootBlock)) {
+ if((item.getItem().getComponents().get(DataComponentTypes.TOOL)!=null)){
//根据挖掘等级加分
- score += 90 + (item1.getComponents().get(DataComponentTypes.TOOL).getSpeed(state) * 10);
+ score += 90 + (item.getItem().getComponents().get(DataComponentTypes.TOOL).getSpeed(state) * 10);
}
}
}
@@ -149,10 +162,10 @@ public class CAutoToolCommand {
float damageScore = 0;
ItemStack item = player.getInventory().getStack(slot);
//剑优先
- if(item.getItem() instanceof SwordItem) damageScore+=10;
+ if(isSwordItem(item.getItem())) damageScore+=10;
//使用所有工具组
- if (item.getItem() instanceof ToolItem tool) {
- damageScore += tool.getMaterial().getAttackDamage();
+ if (isToolItem(item.getItem())) {
+ damageScore += item.getDamage();
//锋利加分
damageScore += Utils.GetEnchantLevel(Enchantments.SHARPNESS, item) * 2;
//精修
diff --git a/src/main/java/com/expvintl/mctools/commands/CFastDropCommand.java b/src/main/java/com/expvintl/mctools/commands/CFastDropCommand.java
index b7b6d77..149dc38 100644
--- a/src/main/java/com/expvintl/mctools/commands/CFastDropCommand.java
+++ b/src/main/java/com/expvintl/mctools/commands/CFastDropCommand.java
@@ -36,12 +36,12 @@ public class CFastDropCommand {
for(Item i:trashItem){
sb.append(i.getName().getString()).append(",");
}
- context.getSource().getPlayer().sendMessage(Text.literal(sb.toString()));
+ context.getSource().getPlayer().sendMessage(Text.literal(sb.toString()),false);
return Command.SINGLE_SUCCESS;
}))));
dispatcher.register(literal("cfastdrop").then(literal("clear").executes((context -> {
trashItem.clear();
- context.getSource().getPlayer().sendMessage(Text.literal("已清除全部物品!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已清除全部物品!"),false);
return Command.SINGLE_SUCCESS;
}))));
dispatcher.register(literal("cfastdrop").then(literal("del").then(argument("物品", ItemStackArgumentType.itemStack(access)).suggests(((context, builder) -> suggestItems(builder))).executes(cmd->{
@@ -49,12 +49,12 @@ public class CFastDropCommand {
if (item != Items.AIR) { // 确保找到的物品是有效的
if (trashItem.contains(item)) {
trashItem.remove(item);
- cmd.getSource().getPlayer().sendMessage(Text.literal("已移除 " + item.getName().getString()));
+ cmd.getSource().getPlayer().sendMessage(Text.literal("已移除 " + item.getName().getString()),false);
}else{
- cmd.getSource().getPlayer().sendMessage(Text.literal("没有找到 " + item.getName().getString()));
+ cmd.getSource().getPlayer().sendMessage(Text.literal("没有找到 " + item.getName().getString()),false);
}
}else{
- cmd.getSource().getPlayer().sendMessage(Text.literal("无效物品!"));
+ cmd.getSource().getPlayer().sendMessage(Text.literal("无效物品!"),false);
return 0;
}
return Command.SINGLE_SUCCESS;
@@ -63,13 +63,13 @@ public class CFastDropCommand {
Item item=ItemStackArgumentType.getItemStackArgument(cmd,"物品").getItem();
if (item != Items.AIR) { // 确保找到的物品是有效的
if(trashItem.contains(item)){
- cmd.getSource().getPlayer().sendMessage(Text.literal( item.getName().getString() + " 已存在!"));
+ cmd.getSource().getPlayer().sendMessage(Text.literal( item.getName().getString() + " 已存在!"),false);
}else {
trashItem.add(item);
- cmd.getSource().getPlayer().sendMessage(Text.literal("已添加 " + item.getName().getString() + " 到垃圾物品列表"));
+ cmd.getSource().getPlayer().sendMessage(Text.literal("已添加 " + item.getName().getString() + " 到垃圾物品列表"),false);
}
}else{
- cmd.getSource().getPlayer().sendMessage(Text.literal("无效物品!"));
+ cmd.getSource().getPlayer().sendMessage(Text.literal("无效物品!"),false);
return 0;
}
return Command.SINGLE_SUCCESS;
@@ -104,15 +104,15 @@ public class CFastDropCommand {
return 0;
}
PlayerInventory inv=player.getInventory();
- for(int i=0;i context) {
((SimpleOptionAccessor)(Object)context.getSource().getClient().options.getGamma()).forceSetValue(32767.0);
- context.getSource().getPlayer().sendMessage(Text.literal("已应用高亮"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已应用高亮"),false);
return Command.SINGLE_SUCCESS;
}
diff --git a/src/main/java/com/expvintl/mctools/commands/CNoFallPacketCommand.java b/src/main/java/com/expvintl/mctools/commands/CNoFallPacketCommand.java
index 5db3383..1c0e539 100644
--- a/src/main/java/com/expvintl/mctools/commands/CNoFallPacketCommand.java
+++ b/src/main/java/com/expvintl/mctools/commands/CNoFallPacketCommand.java
@@ -31,9 +31,9 @@ public class CNoFallPacketCommand {
private static int execute(CommandContext context) {
Globals.noFallPacket.set(context.getArgument("开关", Boolean.class));
if(Globals.noFallPacket.get()){
- context.getSource().getPlayer().sendMessage(Text.literal("已启用摔落伤害!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已启用摔落伤害!"),false);
}else{
- context.getSource().getPlayer().sendMessage(Text.literal("已禁用摔落伤害!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已禁用摔落伤害!"),false);
}
return Command.SINGLE_SUCCESS;
}
@@ -43,7 +43,7 @@ public class CNoFallPacketCommand {
if(!(event.packet instanceof PlayerMoveC2SPacket)) return;
//跳过创造
if(Globals.noFallPacket.get()&& !mc.player.getAbilities().creativeMode){
- if(mc.player.isFallFlying()) return;
+ if(mc.player.fallDistance<=mc.player.getSafeFallDistance()) return;
if(mc.player.getVelocity().y> -0.5) return;
//直接发送在地面的数据包来免伤
((PlayerMoveC2SPacketAccessor)event.packet).setOnGround(true);
diff --git a/src/main/java/com/expvintl/mctools/commands/CQServerPluginsCommand.java b/src/main/java/com/expvintl/mctools/commands/CQServerPluginsCommand.java
index 7eda4a0..2a9fd15 100644
--- a/src/main/java/com/expvintl/mctools/commands/CQServerPluginsCommand.java
+++ b/src/main/java/com/expvintl/mctools/commands/CQServerPluginsCommand.java
@@ -52,7 +52,7 @@ public class CQServerPluginsCommand {
buf.append('[').append(s.getText()).append(']').append(' ');
}
if(MinecraftClient.getInstance().player!=null){
- MinecraftClient.getInstance().player.sendMessage(Text.literal(buf.toString()));
+ MinecraftClient.getInstance().player.sendMessage(Text.literal(buf.toString()),false);
}
Globals.checkBukkitPlugins.set(false);
//取消事件注册
diff --git a/src/main/java/com/expvintl/mctools/commands/CSafeWalkCommand.java b/src/main/java/com/expvintl/mctools/commands/CSafeWalkCommand.java
index 12adaed..2a0b098 100644
--- a/src/main/java/com/expvintl/mctools/commands/CSafeWalkCommand.java
+++ b/src/main/java/com/expvintl/mctools/commands/CSafeWalkCommand.java
@@ -22,9 +22,9 @@ public class CSafeWalkCommand {
private static int execute(CommandContext context) {
Globals.selfWalk.set(context.getArgument("开关", Boolean.class));
if(Globals.selfWalk.get()){
- context.getSource().getPlayer().sendMessage(Text.literal("已启用自动挂边!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已启用自动挂边!"),false);
}else{
- context.getSource().getPlayer().sendMessage(Text.literal("已禁用自动挂边!"));
+ context.getSource().getPlayer().sendMessage(Text.literal("已禁用自动挂边!"),false);
}
return Command.SINGLE_SUCCESS;
}
diff --git a/src/main/java/com/expvintl/mctools/mixin/hud/ChatHudMixin.java b/src/main/java/com/expvintl/mctools/mixin/hud/ChatHudMixin.java
index d3f0f00..5992823 100644
--- a/src/main/java/com/expvintl/mctools/mixin/hud/ChatHudMixin.java
+++ b/src/main/java/com/expvintl/mctools/mixin/hud/ChatHudMixin.java
@@ -17,11 +17,7 @@ import org.spongepowered.asm.mixin.injection.ModifyVariable;
public class ChatHudMixin {
@ModifyReceiver(method = "render",at=@At(value = "INVOKE",target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/OrderedText;III)I"))
private DrawContext onRenderDrawTextWithShadow(DrawContext context, TextRenderer renderer, OrderedText text, int x, int y, int color, @Local ChatHudLine.Visible line){
- RenderSystem.enableBlend();
- RenderSystem.setShaderColor(1,1,1,((color >> 24) & 0x000000FF)/255f);
Utils.DrawHeadIcon(context,line,y);
- RenderSystem.setShaderColor(1,1,1,1);
- RenderSystem.disableBlend();
return context;
}
}
diff --git a/src/main/java/com/expvintl/mctools/texthud/MCInfo.java b/src/main/java/com/expvintl/mctools/texthud/MCInfo.java
index d42e96c..8d85f3c 100644
--- a/src/main/java/com/expvintl/mctools/texthud/MCInfo.java
+++ b/src/main/java/com/expvintl/mctools/texthud/MCInfo.java
@@ -11,6 +11,8 @@ import net.minecraft.item.ItemStack;
import net.minecraft.util.Colors;
import net.minecraft.util.math.Vec3d;
+import java.util.Objects;
+
public class MCInfo {
private static String gameDayToRealTimeFormat(long gameDays) {
// 游戏 1 小时等于 20 分钟
@@ -69,8 +71,8 @@ public class MCInfo {
DrawUtils.AddLeftText(drawContext,String.format("世界时间: %d天 (%s)",mc.world.getTimeOfDay()/24000,gameDayToRealTimeFormat(mc.world.getTimeOfDay()/24000)));
DrawUtils.AddLeftText(drawContext,String.format("当前区块: [%d,%d]",mc.player.getChunkPos().x,mc.player.getChunkPos().z));
DrawUtils.AddLeftText(drawContext,String.format("本地难度:%.2f",mc.world.getLocalDifficulty(mc.player.getBlockPos()).getLocalDifficulty()));
- ItemStack currentItem=p.getInventory().getMainHandStack();
- if(currentItem!=null&¤tItem.isDamageable()){
+ ItemStack currentItem=p.getMainHandStack();
+ if(Objects.nonNull(currentItem)&¤tItem.isDamageable()){
DrawUtils.AddLeftText(drawContext,String.format("耐久度:%d/%d",currentItem.getMaxDamage()-currentItem.getDamage(),currentItem.getMaxDamage()));
}
}
diff --git a/src/main/java/com/expvintl/mctools/utils/CommandUtils.java b/src/main/java/com/expvintl/mctools/utils/CommandUtils.java
index 5586ead..7848892 100644
--- a/src/main/java/com/expvintl/mctools/utils/CommandUtils.java
+++ b/src/main/java/com/expvintl/mctools/utils/CommandUtils.java
@@ -9,7 +9,7 @@ import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.lit
public class CommandUtils {
public static void CreateStatusCommand(String cmd, Setting toggle, CommandDispatcher dispatcher){
dispatcher.register(literal(cmd).executes((context -> {
- context.getSource().getPlayer().sendMessage(Text.literal("当前启用状态: "+toggle.get()));
+ context.getSource().getPlayer().sendMessage(Text.literal("当前启用状态: "+toggle.get()),false);
return Command.SINGLE_SUCCESS;
})));
}
diff --git a/src/main/java/com/expvintl/mctools/utils/Utils.java b/src/main/java/com/expvintl/mctools/utils/Utils.java
index 3895071..d33f2ab 100644
--- a/src/main/java/com/expvintl/mctools/utils/Utils.java
+++ b/src/main/java/com/expvintl/mctools/utils/Utils.java
@@ -11,6 +11,7 @@ import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.ChatHudLine;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.network.PlayerListEntry;
+import net.minecraft.client.render.RenderLayer;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.item.ItemStack;
@@ -30,6 +31,7 @@ import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.Timer;
+import java.util.function.Function;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -220,7 +222,7 @@ public class Utils {
for (int z = (int) -pos.z; z < (pos.z + radius); z++) {
BlockState b = mc.world.getBlockState(new BlockPos(x, hight, z));
if (b.getBlock().asItem().getName().getString().equals(itemName)) {
- mc.player.sendMessage(Text.literal(String.format("找到方块:%d,%d,%d", x, hight, z)));
+ mc.player.sendMessage(Text.literal(String.format("找到方块:%d,%d,%d", x, hight, z)),false);
}
}
}
@@ -244,9 +246,7 @@ public class Utils {
if (entry == null) return;
Identifier skin = entry.getSkinTextures().texture();
-
- draw.drawTexture(skin, 0, y, 8, 8, 8, 8, 8, 8, 64, 64);
- draw.drawTexture(skin, 0, y, 8, 8, 40, 8, 8, 8, 64, 64);
+ draw.drawTexture(RenderLayer::getGuiTextured, skin,0, y, 8, 8, 8, 8, 8, 8, 64, 64);
draw.getMatrices().translate(10, 0, 0);
}
public static GameProfile getChatSender(String text){