我有一些用于 Forge 的 Minecraft Mod 1.16.5 的代码。 无论如何 mc.gameSettings.keyBindAttack.setPressed(true) 似乎没有做它应该做的事情。 当我按下左键(攻击)时,这行代码也没有任何反应。 但是对于其他一些属性(例如 mc.gameSettings.keyBindUseItem....),这可以正常工作。
有人可以帮助我吗?
@SubscribeEvent(priority = HIGHEST)
public void tickEvent(TickEvent.ClientTickEvent event)
{
if (event.phase != TickEvent.Phase.START) return;
if (mc.currentScreen instanceof MainMenuScreen || mc.currentScreen instanceof ChatScreen) return;
assert mc.player != null;
mc.gameSettings.keyBindAttack.setPressed(true);
if (keyBinding == null) return;
else{
ArrayList<String> list = new ArrayList<String>();
Minecraft minecraft = Minecraft.getInstance();
ClientPlayerEntity player= minecraft.player;
ClientWorld level = minecraft.world;
assert player != null;
RayTraceResult block = player.pick(200.0D, 0.0F, false);
RayTraceResult fluid = player.pick(200.0D, 0.0F, true);
if(block.getType() == RayTraceResult.Type.BLOCK)
{
BlockPos blockpos = ((BlockRayTraceResult)block).getPos();
assert level != null;
BlockState blockstate = level.getBlockState(blockpos);
LOGGER.info("Looking at: "+blockstate.getBlock()+"\nPosition= "+ blockpos.getX() + ", " + blockpos.getY() + ", " + blockpos.getZ());
mc.player.connection.getNetworkManager().sendPacket(new CPlayerDiggingPacket(CPlayerDiggingPacket.Action.START_DESTROY_BLOCK, blockpos, Direction.SOUTH));
}
if(fluid.getType() == RayTraceResult.Type.BLOCK)
{
BlockPos blockpos = ((BlockRayTraceResult)fluid).getPos();
assert level != null;
BlockState blockstate = level.getBlockState(blockpos);
LOGGER.info("Looking at: "+blockstate.getBlock()+"\nPosition= "+ blockpos.getX() + ", " + blockpos.getY() + ", " + blockpos.getZ());
mc.player.connection.getNetworkManager().sendPacket(new CPlayerDiggingPacket(CPlayerDiggingPacket.Action.START_DESTROY_BLOCK, blockpos, Direction.SOUTH));
}
}
if (i++ < delay) return;
i = 0;
//if (delay == 0) KeyBinding.setKeyBindState(keyBinding.getKey(), true);
//KeyBinding.onTick(keyBinding.getKey());
}