diff --git a/.gradle/8.1.1/checksums/checksums.lock b/.gradle/8.1.1/checksums/checksums.lock index ab3ed1a..127b655 100644 Binary files a/.gradle/8.1.1/checksums/checksums.lock and b/.gradle/8.1.1/checksums/checksums.lock differ diff --git a/.gradle/8.1.1/executionHistory/executionHistory.bin b/.gradle/8.1.1/executionHistory/executionHistory.bin index 5483de4..99758c9 100644 Binary files a/.gradle/8.1.1/executionHistory/executionHistory.bin and b/.gradle/8.1.1/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.1.1/executionHistory/executionHistory.lock b/.gradle/8.1.1/executionHistory/executionHistory.lock index 14c4d76..6eaa2b4 100644 Binary files a/.gradle/8.1.1/executionHistory/executionHistory.lock and b/.gradle/8.1.1/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.1.1/fileHashes/fileHashes.bin b/.gradle/8.1.1/fileHashes/fileHashes.bin index 5a03504..007e3a2 100644 Binary files a/.gradle/8.1.1/fileHashes/fileHashes.bin and b/.gradle/8.1.1/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.1.1/fileHashes/fileHashes.lock b/.gradle/8.1.1/fileHashes/fileHashes.lock index c9cf932..a3ca077 100644 Binary files a/.gradle/8.1.1/fileHashes/fileHashes.lock and b/.gradle/8.1.1/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.1.1/fileHashes/resourceHashesCache.bin b/.gradle/8.1.1/fileHashes/resourceHashesCache.bin index a61dbe3..b66b6d4 100644 Binary files a/.gradle/8.1.1/fileHashes/resourceHashesCache.bin and b/.gradle/8.1.1/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 605ae46..650c158 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index e2004b1..e577f7a 100644 Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ diff --git a/build.gradle b/build.gradle index 6d6e08b..ea2684b 100644 --- a/build.gradle +++ b/build.gradle @@ -6,21 +6,10 @@ plugins { version = project.mod_version group = project.maven_group -repositories { - // Add repositories to retrieve artifacts from in here. - // You should only use this when depending on other mods because - // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. - // See https://docs.gradle.org/current/userguide/declaring_repositories.html - // for more information about repositories. -} - dependencies { - // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - - // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" } @@ -77,9 +66,5 @@ publishing { // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { - // Add repositories to publish to here. - // Notice: This block does NOT have the same function as the block in the top level. - // The repositories here will be used for publishing your artifact, not for - // retrieving dependencies. } } diff --git a/build/classes/java/main/MCTools-refmap.json b/build/classes/java/main/MCTools-refmap.json index 28b9567..40e1da1 100644 --- a/build/classes/java/main/MCTools-refmap.json +++ b/build/classes/java/main/MCTools-refmap.json @@ -10,7 +10,8 @@ "handlePacket": "Lnet/minecraft/class_2535;method_10759(Lnet/minecraft/class_2596;Lnet/minecraft/class_2547;)V" }, "com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin": { - "attackBlock": "Lnet/minecraft/class_636;method_2910(Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z" + "attackBlock": "Lnet/minecraft/class_636;method_2910(Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z", + "breakBlock": "Lnet/minecraft/class_636;method_2899(Lnet/minecraft/class_2338;)Z" }, "com/expvintl/mctools/mixin/player/PlayerEntityMixin": { "clipAtLedge": "Lnet/minecraft/class_1657;method_21825()Z" @@ -28,7 +29,8 @@ "handlePacket": "Lnet/minecraft/class_2535;method_10759(Lnet/minecraft/class_2596;Lnet/minecraft/class_2547;)V" }, "com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin": { - "attackBlock": "Lnet/minecraft/class_636;method_2910(Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z" + "attackBlock": "Lnet/minecraft/class_636;method_2910(Lnet/minecraft/class_2338;Lnet/minecraft/class_2350;)Z", + "breakBlock": "Lnet/minecraft/class_636;method_2899(Lnet/minecraft/class_2338;)Z" }, "com/expvintl/mctools/mixin/player/PlayerEntityMixin": { "clipAtLedge": "Lnet/minecraft/class_1657;method_21825()Z" diff --git a/build/classes/java/main/com/expvintl/mctools/FeaturesBool.class b/build/classes/java/main/com/expvintl/mctools/FeaturesBool.class index ae08573..fa1a55e 100644 Binary files a/build/classes/java/main/com/expvintl/mctools/FeaturesBool.class and b/build/classes/java/main/com/expvintl/mctools/FeaturesBool.class differ diff --git a/build/classes/java/main/com/expvintl/mctools/MCToolsClient.class b/build/classes/java/main/com/expvintl/mctools/MCToolsClient.class index 6ba646d..681c27c 100644 Binary files a/build/classes/java/main/com/expvintl/mctools/MCToolsClient.class and b/build/classes/java/main/com/expvintl/mctools/MCToolsClient.class differ diff --git a/build/classes/java/main/com/expvintl/mctools/commands/CAutoRespawnCommand.class b/build/classes/java/main/com/expvintl/mctools/commands/CAutoRespawnCommand.class index 455b50d..b561cea 100644 Binary files a/build/classes/java/main/com/expvintl/mctools/commands/CAutoRespawnCommand.class and b/build/classes/java/main/com/expvintl/mctools/commands/CAutoRespawnCommand.class differ diff --git a/build/classes/java/main/com/expvintl/mctools/commands/CQServerPluginsCommand$1.class b/build/classes/java/main/com/expvintl/mctools/commands/CQServerPluginsCommand$1.class index fa5dd6b..5c2c61c 100644 Binary files a/build/classes/java/main/com/expvintl/mctools/commands/CQServerPluginsCommand$1.class and b/build/classes/java/main/com/expvintl/mctools/commands/CQServerPluginsCommand$1.class differ diff --git a/build/classes/java/main/com/expvintl/mctools/commands/CQServerPluginsCommand.class b/build/classes/java/main/com/expvintl/mctools/commands/CQServerPluginsCommand.class index 941c973..14c1b8f 100644 Binary files a/build/classes/java/main/com/expvintl/mctools/commands/CQServerPluginsCommand.class and b/build/classes/java/main/com/expvintl/mctools/commands/CQServerPluginsCommand.class differ diff --git a/build/classes/java/main/com/expvintl/mctools/mixin/MinecraftClientMixin.class b/build/classes/java/main/com/expvintl/mctools/mixin/MinecraftClientMixin.class index 4aecbef..22b67bf 100644 Binary files a/build/classes/java/main/com/expvintl/mctools/mixin/MinecraftClientMixin.class and b/build/classes/java/main/com/expvintl/mctools/mixin/MinecraftClientMixin.class differ diff --git a/build/classes/java/main/com/expvintl/mctools/mixin/network/ClientConnectionMixin.class b/build/classes/java/main/com/expvintl/mctools/mixin/network/ClientConnectionMixin.class index 920fa4f..05d1061 100644 Binary files a/build/classes/java/main/com/expvintl/mctools/mixin/network/ClientConnectionMixin.class and b/build/classes/java/main/com/expvintl/mctools/mixin/network/ClientConnectionMixin.class differ diff --git a/build/classes/java/main/com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin.class b/build/classes/java/main/com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin.class index 2db7440..696345e 100644 Binary files a/build/classes/java/main/com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin.class and b/build/classes/java/main/com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin.class differ diff --git a/build/devlibs/MCTools-1.0-dev.jar b/build/devlibs/MCTools-1.0-dev.jar index 25f711b..458a9db 100644 Binary files a/build/devlibs/MCTools-1.0-dev.jar and b/build/devlibs/MCTools-1.0-dev.jar differ diff --git a/build/devlibs/MCTools-1.0-sources.jar b/build/devlibs/MCTools-1.0-sources.jar index 14ec759..96fab83 100644 Binary files a/build/devlibs/MCTools-1.0-sources.jar and b/build/devlibs/MCTools-1.0-sources.jar differ diff --git a/build/libs/MCTools-1.0-sources.jar b/build/libs/MCTools-1.0-sources.jar index 0069a9c..ee90187 100644 Binary files a/build/libs/MCTools-1.0-sources.jar and b/build/libs/MCTools-1.0-sources.jar differ diff --git a/build/libs/MCTools-1.0.jar b/build/libs/MCTools-1.0.jar index 483445d..04deeed 100644 Binary files a/build/libs/MCTools-1.0.jar and b/build/libs/MCTools-1.0.jar differ diff --git a/build/loom-cache/mixin-map-net.fabricmc.yarn.1_20_1.1.20.1+build.10-v2.main.tiny b/build/loom-cache/mixin-map-net.fabricmc.yarn.1_20_1.1.20.1+build.10-v2.main.tiny index 4242914..afd84f3 100644 --- a/build/loom-cache/mixin-map-net.fabricmc.yarn.1_20_1.1.20.1+build.10-v2.main.tiny +++ b/build/loom-cache/mixin-map-net.fabricmc.yarn.1_20_1.1.20.1+build.10-v2.main.tiny @@ -1,2 +1 @@ v1 named intermediary -METHOD com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin ()V syncSelectedSlot method_2911 diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 4ed6bad..5556513 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/com/expvintl/mctools/FeaturesBool.java b/src/main/java/com/expvintl/mctools/FeaturesBool.java index 71f7c96..c6846bf 100644 --- a/src/main/java/com/expvintl/mctools/FeaturesBool.java +++ b/src/main/java/com/expvintl/mctools/FeaturesBool.java @@ -4,4 +4,5 @@ public class FeaturesBool { public static boolean autoRespawn=false; public static boolean selfWalk=false; public static boolean checkBukkitPlugins=false; + public static boolean autoTool=false; } diff --git a/src/main/java/com/expvintl/mctools/MCToolsClient.java b/src/main/java/com/expvintl/mctools/MCToolsClient.java index 0c5f7c2..2fe5e7f 100644 --- a/src/main/java/com/expvintl/mctools/MCToolsClient.java +++ b/src/main/java/com/expvintl/mctools/MCToolsClient.java @@ -1,9 +1,6 @@ package com.expvintl.mctools; -import com.expvintl.mctools.commands.CAutoRespawnCommand; -import com.expvintl.mctools.commands.CFullbirghtCommand; -import com.expvintl.mctools.commands.CQServerPluginsCommand; -import com.expvintl.mctools.commands.CSafeWalkCommand; +import com.expvintl.mctools.commands.*; import com.expvintl.mctools.utils.Utils; import com.mojang.brigadier.CommandDispatcher; import net.fabricmc.api.ClientModInitializer; @@ -73,6 +70,7 @@ public class MCToolsClient implements ClientModInitializer { CFullbirghtCommand.register(dispatcher); CAutoRespawnCommand.register(dispatcher); CSafeWalkCommand.register(dispatcher); + CAutoToolCommand.register(dispatcher); CQServerPluginsCommand.register(dispatcher); } } diff --git a/src/main/java/com/expvintl/mctools/commands/CAutoRespawnCommand.java b/src/main/java/com/expvintl/mctools/commands/CAutoRespawnCommand.java index cfe6b1b..42ad82c 100644 --- a/src/main/java/com/expvintl/mctools/commands/CAutoRespawnCommand.java +++ b/src/main/java/com/expvintl/mctools/commands/CAutoRespawnCommand.java @@ -1,19 +1,26 @@ package com.expvintl.mctools.commands; import com.expvintl.mctools.FeaturesBool; +import com.expvintl.mctools.events.MCEventBus; +import com.expvintl.mctools.events.client.OpenScreenEvent; import com.expvintl.mctools.mixin.interfaces.SimpleOptionAccessor; +import com.google.common.eventbus.Subscribe; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.arguments.BoolArgumentType; import com.mojang.brigadier.context.CommandContext; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.DeathScreen; import net.minecraft.text.Text; import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; public class CAutoRespawnCommand { + private static final CAutoRespawnCommand INSTANCE=new CAutoRespawnCommand(); public static void register(CommandDispatcher dispatcher){ + MCEventBus.INSTANCE.register(INSTANCE); dispatcher.register(literal("cautorespawn").then(argument("开关", BoolArgumentType.bool()).executes(CAutoRespawnCommand::execute))); } @@ -26,4 +33,15 @@ public class CAutoRespawnCommand { } return Command.SINGLE_SUCCESS; } + @Subscribe + private void onOpenScreen(OpenScreenEvent event){ + if(FeaturesBool.autoRespawn) { + //自动重生 + if (event.screen instanceof DeathScreen) { + if (MinecraftClient.getInstance().player != null) { + MinecraftClient.getInstance().player.requestRespawn(); + } + } + } + } } diff --git a/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java b/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java new file mode 100644 index 0000000..00e54ec --- /dev/null +++ b/src/main/java/com/expvintl/mctools/commands/CAutoToolCommand.java @@ -0,0 +1,108 @@ +package com.expvintl.mctools.commands; + +import com.expvintl.mctools.FeaturesBool; +import com.expvintl.mctools.events.MCEventBus; +import com.expvintl.mctools.events.player.PlayerAttackBlockEvent; +import com.expvintl.mctools.events.player.PlayerBreakBlockEvent; +import com.google.common.eventbus.Subscribe; +import com.mojang.brigadier.Command; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.arguments.BoolArgumentType; +import com.mojang.brigadier.context.CommandContext; +import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; +import net.minecraft.block.BambooBlock; +import net.minecraft.block.BambooSaplingBlock; +import net.minecraft.block.BlockState; +import net.minecraft.client.MinecraftClient; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ShearsItem; +import net.minecraft.item.SwordItem; +import net.minecraft.item.ToolItem; +import net.minecraft.text.Text; + +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; + +public class CAutoToolCommand { + private static final CAutoToolCommand INSTANCE=new CAutoToolCommand(); + private int lastSlot=-1; + public static void register(CommandDispatcher dispatcher){ + MCEventBus.INSTANCE.register(INSTANCE); + dispatcher.register(literal("cautotool").then(argument("开关", BoolArgumentType.bool()).executes(CAutoToolCommand::execute))); + } + + private static int execute(CommandContext context) { + FeaturesBool.autoTool=context.getArgument("开关", Boolean.class); + if(FeaturesBool.autoTool){ + context.getSource().getPlayer().sendMessage(Text.literal("已启用智能工具!")); + }else{ + context.getSource().getPlayer().sendMessage(Text.literal("已禁用智能工具!")); + } + return Command.SINGLE_SUCCESS; + } + @Subscribe + private void onBreakBlock(PlayerBreakBlockEvent event){ + if(!FeaturesBool.autoTool) return; + MinecraftClient mc=MinecraftClient.getInstance(); + if (mc.world == null||mc.player==null) return; + if (lastSlot!=-1){ + //破坏方块后切换回去 + mc.player.getInventory().selectedSlot=lastSlot; + } + } + @Subscribe + private void onAttackBlock(PlayerAttackBlockEvent event){ + if(!FeaturesBool.autoTool) return; + //自动工具 + MinecraftClient mc=MinecraftClient.getInstance(); + if (mc.world == null||mc.player==null) return; + BlockState state= mc.world.getBlockState(event.blockPos); + //跳过不可破坏 + if(state.getHardness(mc.world, event.blockPos) < 0) return; + ItemStack currentItem = mc.player.getMainHandStack(); + //统计最好的挖掘分数 + double bestScore=-1; + //工具槽 + int slot=-1; + //遍历每一个物品槽 + for(int i=0;i<9;i++){ + ItemStack item = mc.player.getInventory().getStack(i); + double score=getScore(item,state); + if(score<0) continue; + //选出最好分数的工具 + if(score>bestScore){ + bestScore=score; + slot=i; + } + } + //确定已经选择好了工具就切换 + if((slot!=-1&&bestScore>getScore(currentItem,state))||shouldStopUsing(currentItem)||!isTools(currentItem)) { + //记住上一次的槽方便恢复 + lastSlot=mc.player.getInventory().selectedSlot; + //切换过去 + mc.player.getInventory().selectedSlot = slot; + } + if(isTools(currentItem)&&shouldStopUsing(currentItem)) { + mc.options.attackKey.setPressed(false); + } + } + public double getScore(ItemStack item, BlockState state){ + double score=0; + //Is Tool!! + if(item.getItem() instanceof ToolItem || item.getItem() instanceof ShearsItem){ + //根据挖掘速度提升评分 + score+=item.getMiningSpeedMultiplier(state)*10; + if (item.getItem() instanceof SwordItem item1 && (state.getBlock() instanceof BambooBlock || state.getBlock() instanceof BambooSaplingBlock)) + //根据挖掘等级加分 + score += 90 + (item1.getMaterial().getMiningLevel() * 10); + } + return score; + } + //停用低耐久度 + private boolean shouldStopUsing(ItemStack itemStack) { + return (itemStack.getMaxDamage() - itemStack.getDamage()) < (itemStack.getMaxDamage() * 6 / 100); + } + public boolean isTools(ItemStack item){ + return item.getItem() instanceof ToolItem || item.getItem() instanceof ShearsItem; + } +} diff --git a/src/main/java/com/expvintl/mctools/commands/CQServerPluginsCommand.java b/src/main/java/com/expvintl/mctools/commands/CQServerPluginsCommand.java index e7b64d0..307d87a 100644 --- a/src/main/java/com/expvintl/mctools/commands/CQServerPluginsCommand.java +++ b/src/main/java/com/expvintl/mctools/commands/CQServerPluginsCommand.java @@ -1,28 +1,32 @@ package com.expvintl.mctools.commands; import com.expvintl.mctools.FeaturesBool; -import com.expvintl.mctools.mixin.interfaces.SimpleOptionAccessor; +import com.expvintl.mctools.events.MCEventBus; +import com.expvintl.mctools.events.network.PacketEvent; +import com.google.common.eventbus.Subscribe; import com.mojang.brigadier.Command; import com.mojang.brigadier.CommandDispatcher; import com.mojang.brigadier.context.CommandContext; +import com.mojang.brigadier.suggestion.Suggestion; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.minecraft.client.MinecraftClient; import net.minecraft.network.packet.c2s.play.RequestCommandCompletionsC2SPacket; +import net.minecraft.network.packet.s2c.play.CommandSuggestionsS2CPacket; import net.minecraft.text.Text; - import java.util.Random; import java.util.Timer; import java.util.TimerTask; -import java.util.concurrent.Executor; - import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; public class CQServerPluginsCommand { + private static final CQServerPluginsCommand INSTANCE=new CQServerPluginsCommand(); public static void register(CommandDispatcher dispatcher){ dispatcher.register(literal("cqserverplugins").executes(CQServerPluginsCommand::execute)); } private static int execute(CommandContext context) { + //注册数据包接受事件 + MCEventBus.INSTANCE.register(INSTANCE); FeaturesBool.checkBukkitPlugins=true; context.getSource().getPlayer().networkHandler.sendPacket(new RequestCommandCompletionsC2SPacket(new Random().nextInt(200),"bukkit:ver ")); //1秒后关闭避免识别其他命令提示 @@ -30,8 +34,28 @@ public class CQServerPluginsCommand { @Override public void run() { FeaturesBool.checkBukkitPlugins=false; + MCEventBus.INSTANCE.unregister(INSTANCE); } },1000); return Command.SINGLE_SUCCESS; } + @Subscribe + public void onReceivePacket(PacketEvent p){ + //探测bukkit服务器插件 + if (!MinecraftClient.getInstance().isIntegratedServerRunning()&&FeaturesBool.checkBukkitPlugins) { + if (p.packet instanceof CommandSuggestionsS2CPacket sg) { + StringBuilder buf=new StringBuilder(); + buf.append(String.format("找到%d个插件:",sg.getSuggestions().getList().size())).append('\n'); + for(Suggestion s:sg.getSuggestions().getList()){ + buf.append('[').append(s.getText()).append(']').append(' '); + } + if(MinecraftClient.getInstance().player!=null){ + MinecraftClient.getInstance().player.sendMessage(Text.literal(buf.toString())); + } + FeaturesBool.checkBukkitPlugins=false; + //取消事件注册 + MCEventBus.INSTANCE.unregister(INSTANCE); + } + } + } } diff --git a/src/main/java/com/expvintl/mctools/events/MCEventBus.java b/src/main/java/com/expvintl/mctools/events/MCEventBus.java new file mode 100644 index 0000000..2d5810c --- /dev/null +++ b/src/main/java/com/expvintl/mctools/events/MCEventBus.java @@ -0,0 +1,7 @@ +package com.expvintl.mctools.events; + +import com.google.common.eventbus.EventBus; + +public class MCEventBus { + public static EventBus INSTANCE=new EventBus(); +} diff --git a/src/main/java/com/expvintl/mctools/events/client/OpenScreenEvent.java b/src/main/java/com/expvintl/mctools/events/client/OpenScreenEvent.java new file mode 100644 index 0000000..3129919 --- /dev/null +++ b/src/main/java/com/expvintl/mctools/events/client/OpenScreenEvent.java @@ -0,0 +1,12 @@ +package com.expvintl.mctools.events.client; + +import net.minecraft.client.gui.screen.Screen; + +public class OpenScreenEvent { + private static final OpenScreenEvent INSTANCE=new OpenScreenEvent(); + public Screen screen; + public static OpenScreenEvent get(Screen screen){ + INSTANCE.screen=screen; + return INSTANCE; + } +} diff --git a/src/main/java/com/expvintl/mctools/events/network/PacketEvent.java b/src/main/java/com/expvintl/mctools/events/network/PacketEvent.java new file mode 100644 index 0000000..45e14e3 --- /dev/null +++ b/src/main/java/com/expvintl/mctools/events/network/PacketEvent.java @@ -0,0 +1,12 @@ +package com.expvintl.mctools.events.network; + +import net.minecraft.network.packet.Packet; + +public class PacketEvent { + private static final PacketEvent INSTANCE=new PacketEvent(); + public Packet packet; + public static PacketEvent get(Packet pack){ + INSTANCE.packet=pack; + return INSTANCE; + } +} diff --git a/src/main/java/com/expvintl/mctools/events/player/PlayerAttackBlockEvent.java b/src/main/java/com/expvintl/mctools/events/player/PlayerAttackBlockEvent.java new file mode 100644 index 0000000..eb815c1 --- /dev/null +++ b/src/main/java/com/expvintl/mctools/events/player/PlayerAttackBlockEvent.java @@ -0,0 +1,16 @@ +package com.expvintl.mctools.events.player; + +import net.minecraft.network.packet.Packet; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; + +public class PlayerAttackBlockEvent { + private static final PlayerAttackBlockEvent INSTANCE=new PlayerAttackBlockEvent(); + public BlockPos blockPos; + public Direction direction; + public static PlayerAttackBlockEvent get(BlockPos blockPos, Direction direction){ + INSTANCE.blockPos=blockPos; + INSTANCE.direction=direction; + return INSTANCE; + } +} diff --git a/src/main/java/com/expvintl/mctools/events/player/PlayerBreakBlockEvent.java b/src/main/java/com/expvintl/mctools/events/player/PlayerBreakBlockEvent.java new file mode 100644 index 0000000..e0e643a --- /dev/null +++ b/src/main/java/com/expvintl/mctools/events/player/PlayerBreakBlockEvent.java @@ -0,0 +1,14 @@ +package com.expvintl.mctools.events.player; + +import net.minecraft.util.math.BlockPos; +import org.lwjgl.system.windows.INPUT; + +public class PlayerBreakBlockEvent { + private static final PlayerBreakBlockEvent INSTANCE=new PlayerBreakBlockEvent(); + public BlockPos pos; + + public static PlayerBreakBlockEvent get(BlockPos blockPos){ + INSTANCE.pos=blockPos; + return INSTANCE; + } +} diff --git a/src/main/java/com/expvintl/mctools/mixin/MinecraftClientMixin.java b/src/main/java/com/expvintl/mctools/mixin/MinecraftClientMixin.java index fd2340f..48fa090 100644 --- a/src/main/java/com/expvintl/mctools/mixin/MinecraftClientMixin.java +++ b/src/main/java/com/expvintl/mctools/mixin/MinecraftClientMixin.java @@ -1,6 +1,8 @@ package com.expvintl.mctools.mixin; import com.expvintl.mctools.FeaturesBool; +import com.expvintl.mctools.events.MCEventBus; +import com.expvintl.mctools.events.client.OpenScreenEvent; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.DeathScreen; import net.minecraft.client.gui.screen.Screen; @@ -14,13 +16,6 @@ public class MinecraftClientMixin { @Inject(method = "setScreen",at=@At("HEAD")) //挂钩设置界面函数 private void onSetScreen(Screen screen, CallbackInfo info){ - if(FeaturesBool.autoRespawn) { - //自动重生 - if (screen instanceof DeathScreen) { - if (MinecraftClient.getInstance().player != null) { - MinecraftClient.getInstance().player.requestRespawn(); - } - } - } + MCEventBus.INSTANCE.post(OpenScreenEvent.get(screen)); } } diff --git a/src/main/java/com/expvintl/mctools/mixin/network/ClientConnectionMixin.java b/src/main/java/com/expvintl/mctools/mixin/network/ClientConnectionMixin.java index 806333e..cc200d8 100644 --- a/src/main/java/com/expvintl/mctools/mixin/network/ClientConnectionMixin.java +++ b/src/main/java/com/expvintl/mctools/mixin/network/ClientConnectionMixin.java @@ -1,46 +1,20 @@ package com.expvintl.mctools.mixin.network; -import com.expvintl.mctools.FeaturesBool; -import com.google.common.eventbus.EventBus; -import com.mojang.brigadier.suggestion.Suggestion; -import net.minecraft.client.MinecraftClient; +import com.expvintl.mctools.events.MCEventBus; +import com.expvintl.mctools.events.network.PacketEvent; import net.minecraft.network.ClientConnection; -import net.minecraft.network.listener.ClientPlayPacketListener; import net.minecraft.network.listener.PacketListener; -import net.minecraft.network.packet.BundlePacket; import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.play.RequestCommandCompletionsC2SPacket; -import net.minecraft.network.packet.s2c.play.BundleS2CPacket; -import net.minecraft.network.packet.s2c.play.CommandSuggestionsS2CPacket; -import net.minecraft.text.Text; -import org.slf4j.Logger; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import java.util.Iterator; - @Mixin(ClientConnection.class) public class ClientConnectionMixin { - @Inject(method = "handlePacket",at=@At("HEAD")) private static void onHandlePacket(Packet packet, PacketListener listener, CallbackInfo info) { - //检查bukkit服务器插件 - if (!MinecraftClient.getInstance().isIntegratedServerRunning()&&FeaturesBool.checkBukkitPlugins) { - if (packet instanceof CommandSuggestionsS2CPacket sg) { - StringBuilder buf=new StringBuilder(); - buf.append(String.format("找到%d个插件:",sg.getSuggestions().getList().size())).append('\n'); - for(Suggestion s:sg.getSuggestions().getList()){ - buf.append('[').append(s.getText()).append(']').append(' '); - } - if(MinecraftClient.getInstance().player!=null){ - MinecraftClient.getInstance().player.sendMessage(Text.literal(buf.toString())); - } - FeaturesBool.checkBukkitPlugins=false; - } - } + //传入事件 + MCEventBus.INSTANCE.post(PacketEvent.get(packet)); } } diff --git a/src/main/java/com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin.java b/src/main/java/com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin.java index ea9faf0..1626e32 100644 --- a/src/main/java/com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin.java +++ b/src/main/java/com/expvintl/mctools/mixin/player/ClientPlayerInteractionManagerMixin.java @@ -1,5 +1,9 @@ package com.expvintl.mctools.mixin.player; +import com.expvintl.mctools.FeaturesBool; +import com.expvintl.mctools.events.MCEventBus; +import com.expvintl.mctools.events.player.PlayerAttackBlockEvent; +import com.expvintl.mctools.events.player.PlayerBreakBlockEvent; import com.expvintl.mctools.mixin.interfaces.IClientPlayerInteractionManager; import net.minecraft.block.BambooBlock; import net.minecraft.block.BambooSaplingBlock; @@ -14,45 +18,20 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ClientPlayerInteractionManager.class) -public abstract class ClientPlayerInteractionManagerMixin implements IClientPlayerInteractionManager { - @Shadow - protected abstract void syncSelectedSlot(); +public class ClientPlayerInteractionManagerMixin { + @Inject(method = "breakBlock",at=@At("HEAD")) + private void breakBlock(BlockPos pos, CallbackInfoReturnable cir){ + MCEventBus.INSTANCE.post(PlayerBreakBlockEvent.get(pos)); + } @Inject(method = "attackBlock",at=@At("HEAD")) private void onAttackBlock(BlockPos blockPos, Direction direction, CallbackInfoReturnable info){ - //自动工具 - MinecraftClient mc=MinecraftClient.getInstance(); - if (mc.world == null) return; - BlockState state= mc.world.getBlockState(blockPos); - if(state.getHardness(mc.world, blockPos) < 0) return; - if(mc.player==null) return; - ItemStack currentItem = mc.player.getMainHandStack(); - double bestScore=-1; - int slot=0; - for(int i=0;i<9;i++){ - ItemStack item = mc.player.getInventory().getStack(i); - //Is Tool!! - if(item.getItem() instanceof ToolItem || item.getItem() instanceof ShearsItem){ - double score=0; - score+=item.getMiningSpeedMultiplier(state)*1000; - if (item.getItem() instanceof SwordItem item1 && (state.getBlock() instanceof BambooBlock || state.getBlock() instanceof BambooSaplingBlock)) - score += 9000 + (item1.getMaterial().getMiningLevel() * 1000); - if(score<0) continue; - if(score>bestScore){ - bestScore=score; - slot=i; - } - } - } - mc.player.getInventory().selectedSlot=slot; - ((IClientPlayerInteractionManager)mc.interactionManager).syncSelected(); - } - @Override - public void syncSelected() { - syncSelectedSlot(); + MCEventBus.INSTANCE.post(PlayerAttackBlockEvent.get(blockPos,direction)); } }